内容

名称

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 本身相同的条款下重新发布和/或修改它。