FindBin - 查找原始 Perl 脚本的目录
use FindBin;
use lib "$FindBin::Bin/../lib";
or
use FindBin qw($Bin);
use lib "$Bin/../lib";
查找脚本 bin 目录的完整路径,以便使用相对于 bin 目录的路径。
这允许用户为某些软件设置一个目录树,其中包含目录 <root>/bin
和 <root>/lib
,然后上面的示例允许使用 lib 目录中的模块,而无需知道软件树安装的位置。
如果使用 -e 选项调用 perl,或者 perl 脚本从 STDIN
读取,则 FindBin 将 $Bin
和 $RealBin
都设置为当前目录。
$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
如果在同一个解释器下,有两个模块从不同的目录使用 FindBin
,则这将无法正常工作。由于 FindBin
使用 BEGIN
块,它只会被执行一次,并且只有第一个调用者会得到正确的结果。这是 mod_perl 和其他持久性 Perl 环境中的一个问题,在这种环境中你不应该使用此模块。这也意味着你应该避免在打算放到 CPAN 上的模块中使用 FindBin
。为了确保 FindBin
能够正常工作,需要调用 again
函数
use FindBin;
FindBin::again(); # or FindBin->again;
在 FindBin 的早期版本中,没有 again
函数。解决方法是强制重新执行 BEGIN
代码块。
delete $INC{'FindBin.pm'};
require FindBin;
FindBin 是 Perl 核心发行版的一部分。请在 https://github.com/Perl/perl5/issues 上提交错误报告。
Graham Barr <[email protected]> Nick Ing-Simmons <[email protected]>
版权所有 (c) 1995 Graham Barr & Nick Ing-Simmons。保留所有权利。本程序是自由软件;您可以在 Perl 本身相同的条款下重新发布和/或修改它。