.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "FindBin 3" .TH FindBin 3 2023-12-22 "perl v5.42.0" "Perl Programmers Reference Guide" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NAME FindBin \- Locate directory of original Perl script .SH SYNOPSIS .IX Header "SYNOPSIS" .Vb 2 \& use FindBin; \& use lib "$FindBin::Bin/../lib"; \& \& use FindBin qw($Bin); \& use lib "$Bin/../lib"; .Ve .SH DESCRIPTION .IX Header "DESCRIPTION" Locates the full path to the script bin directory to allow the use of paths relative to the bin directory. .PP This allows a user to setup a directory tree for some software with directories \f(CW\*(C`/bin\*(C'\fR and \f(CW\*(C`/lib\*(C'\fR, and then the above example will allow the use of modules in the lib directory without knowing where the software tree is installed. .PP If \f(CW\*(C`perl\*(C'\fR is invoked using the \f(CW\*(C`\-e\*(C'\fR option or the Perl script is read from \&\f(CW\*(C`STDIN\*(C'\fR, then \f(CW\*(C`FindBin\*(C'\fR sets both \f(CW$Bin\fR and \f(CW$RealBin\fR to the current directory. .SH "EXPORTABLE VARIABLES" .IX Header "EXPORTABLE VARIABLES" .ie n .IP "$Bin or $Dir" 4 .el .IP "\f(CW$Bin\fR or \f(CW$Dir\fR" 4 .IX Item "$Bin or $Dir" Path to the bin \fBdirectory\fR from where script was invoked .ie n .IP $Script 4 .el .IP \f(CW$Script\fR 4 .IX Item "$Script" \&\fBBasename\fR of the script from which \f(CW\*(C`perl\*(C'\fR was invoked .ie n .IP "$RealBin or $RealDir" 4 .el .IP "\f(CW$RealBin\fR or \f(CW$RealDir\fR" 4 .IX Item "$RealBin or $RealDir" \&\f(CW$Bin\fR with all links resolved .ie n .IP $RealScript 4 .el .IP \f(CW$RealScript\fR 4 .IX Item "$RealScript" \&\f(CW$Script\fR with all links resolved .PP You can also use the \f(CW\*(C`ALL\*(C'\fR tag to export all of the above variables together: .PP .Vb 1 \& use FindBin \*(Aq:ALL\*(Aq; .Ve .SH "KNOWN ISSUES" .IX Header "KNOWN ISSUES" If there are two modules using \f(CW\*(C`FindBin\*(C'\fR from different directories under the same interpreter, this won\*(Aqt work. Since \f(CW\*(C`FindBin\*(C'\fR uses a \&\f(CW\*(C`BEGIN\*(C'\fR block, it\*(Aqll be executed only once, and only the first caller will get it right. This is a problem under \f(CW\*(C`mod_perl\*(C'\fR and other persistent Perl environments, where you shouldn\*(Aqt use this module. Which also means that you should avoid using \f(CW\*(C`FindBin\*(C'\fR in modules that you plan to put on CPAN. Call the \f(CW\*(C`again\*(C'\fR function to make sure that \f(CW\*(C`FindBin\*(C'\fR will work: .PP .Vb 2 \& use FindBin; \& FindBin::again(); # or FindBin\->again; .Ve .PP In former versions of \f(CW\*(C`FindBin\*(C'\fR there was no \f(CW\*(C`again\*(C'\fR function. The workaround was to force the \f(CW\*(C`BEGIN\*(C'\fR block to be executed again: .PP .Vb 2 \& delete $INC{\*(AqFindBin.pm\*(Aq}; \& require FindBin; .Ve .SH AUTHORS .IX Header "AUTHORS" \&\f(CW\*(C`FindBin\*(C'\fR is supported as part of the core perl distribution. Please submit bug reports at . .PP Graham Barr <\fIgbarr@pobox.com\fR> Nick Ing\-Simmons <\fInik@tiuk.ti.com\fR> .SH COPYRIGHT .IX Header "COPYRIGHT" Copyright (c) 1995 Graham Barr & Nick Ing\-Simmons. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.