Manual

- Overview
- Tutorials
- FAQs
- History / Changes
- License

Reference

- Language
- Functions
- Operators
- Special Variables
- Pragmas
- Utilities
- Internals
- Platform Specific

Modules

- A • B • C • D • E
- F • G • H • I • L
- M • N • O • P • S
- T • U • X

News / Blogs

- Perl Buzz
- Perl Iron Man
- Perlsphere
- Planet Perl
- TPF news
- Use Perl

See also

- CPAN
- Perl.org
- Perl.com
- Perl 5 Wiki
- Perl Jobs
- Perl Mongers
- Perl Monks

Contact

- Site designed and maintained by Jon Allen (JJ)
- http://perl.jonallen.info

- View the project page and FAQs

# FindBin

Perl 5 version 10.1 documentation
Go to top • Show page index • Download PDF

# FindBin

- NAME
- SYNOPSIS
- DESCRIPTION
- EXPORTABLE VARIABLES
- KNOWN ISSUES
- KNOWN BUGS
- AUTHORS
- COPYRIGHT

# NAME

FindBin - Locate directory of original perl script

# SYNOPSIS

     use FindBin; use lib "$FindBin::Bin/../lib"; or use FindBin qw($Bin); use lib "$Bin/../lib";

# DESCRIPTION

Locates the full path to the script bin directory to allow the use of paths relative to the bin directory.

This allows a user to setup a directory tree for some software with directories `<root>/bin` and `<root>/lib` , and then the above example will allow the use of modules in the lib directory without knowing where the software tree is installed.

If perl is invoked using the -e option or the perl script is read from `STDIN` then FindBin sets both `$Bin` and `$RealBin` to the current directory.

# EXPORTABLE VARIABLES

     $Bin         - path to bin directory from where script was invoked $Script      - basename of script from which perl was invoked $RealBin     - $Bin with all links resolved $RealScript  - $Script with all links resolved

# KNOWN ISSUES

If there are two modules using `FindBin` from different directories under the same interpreter, this won't work. Since `FindBin` uses a `BEGIN` block, it'll be executed only once, and only the first caller will get it right. This is a problem under mod_perl and other persistent Perl environments, where you shouldn't use this module. Which also means that you should avoid using `FindBin` in modules that you plan to put on CPAN. To make sure that `FindBin` will work is to call the `again` function:

      use FindBin;  FindBin::again(); # or FindBin->again;

In former versions of FindBin there was no `again` function. The workaround was to force the `BEGIN` block to be executed again:

      delete $INC{'FindBin.pm'};  require FindBin;

# KNOWN BUGS

If perl is invoked as

       perl filename

and filename does not have executable rights and a program called filename exists in the users `$ENV{PATH}` which satisfies both -x and -T then FindBin assumes that it was invoked via the `$ENV{PATH}` .

Workaround is to invoke perl as

     perl ./filename

# AUTHORS

FindBin is supported as part of the core perl distribution. Please send bug reports to <perlbug@perl.org> using the perlbug program included with perl.

Graham Barr <gbarr@pobox.com> Nick Ing-Simmons <nik@tiuk.ti.com>

# 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.

Page index

- NAME
- SYNOPSIS
- DESCRIPTION
- EXPORTABLE VARIABLES
- KNOWN ISSUES
- KNOWN BUGS
- AUTHORS
- COPYRIGHT

Recently read

Tools

- Preferences