lib - 在编译时操作 @INC
use lib LIST;
no lib LIST;
这是一个小型简单的模块,简化了在编译时操作 @INC 的过程。
它通常用于向 Perl 的搜索路径添加额外的目录,以便后续的 use
或 require
语句能够找到不在 Perl 默认搜索路径上的模块。
use lib
的参数将添加到 Perl 搜索路径的开头。例如:
use lib LIST;
几乎等同于:
BEGIN { unshift(@INC, LIST) }
对于 LIST 中的每个目录(这里称为 $dir),lib 模块还会检查是否存在名为 $dir/$archname/auto 的目录。如果存在,则认为 $dir/$archname 目录是相应的体系结构特定目录,并将其添加到 @INC 中,位于 $dir 之前。lib.pm 还检查是否存在名为 $dir/$version 和 $dir/$version/$archname 的目录,并将这些目录添加到 @INC 中。
可以使用以下命令查找$archname
的当前值
perl -V:archname
获取$version
当前值的对应命令是
perl -V:version
为了避免内存泄漏,所有 @INC 中尾部的重复条目都会被删除。
通常情况下,你只需要向 @INC 中添加目录。如果你需要从 @INC 中删除目录,请确保只删除你自己添加的目录,或者确保你的脚本中其他模块不需要这些目录。其他模块可能添加了它们正常运行所需的目录。
no lib
语句会从 @INC 中删除所有名为目录的实例。
对于 LIST 中的每个目录(这里称为 $dir),lib 模块还会检查是否存在名为 $dir/$archname/auto 的目录。如果存在,则认为 $dir/$archname 目录是相应的体系结构特定目录,也会从 @INC 中删除。lib.pm 还会检查是否存在名为 $dir/$version 和 $dir/$version/$archname 的目录,并从 @INC 中删除这些目录。
当 lib 模块首次加载时,它会将 @INC 的当前值记录在数组 @lib::ORIG_INC
中。要将 @INC 恢复到该值,你可以使用以下命令
@INC = @lib::ORIG_INC;
为了保持 lib.pm 的简洁和简单,它只适用于 Unix 文件路径。这并不意味着它只能在 Unix 上运行,但非 Unix 用户必须先将其文件路径转换为 Unix 约定。
# VMS users wanting to put [.stuff.moo] into
# their @INC would write
use lib 'stuff/moo';
将来,该模块可能会使用 File::Spec 来确定路径,就像它现在在 Mac OS 上所做的那样(在 Unix 风格或 Mac 风格的路径都可以使用的情况下,Unix 风格的路径会在添加到 @INC 之前被正确地转换为 Mac 风格的路径)。
如果你尝试像下面这样将文件添加到 @INC
use lib 'this_is_a_file.txt';
lib
会对此发出警告。唯一的例外是扩展名为 .par
的文件,这些文件旨在用作库。
FindBin - 可选模块,用于处理相对于源文件的路径。
PAR - 可选模块,可以将 .par
文件视为 Perl 库。
Tim Bunce,1995 年 6 月 2 日。
lib
由 perl5-porters 维护。请将任何问题直接发送到规范的邮件列表。任何适用于 CPAN 版本的内容都可以发送给它的维护者。
维护者:The Perl5-Porters <[email protected]>
CPAN 版本的维护者:Steffen Mueller <[email protected]>
此软件包自 Perl 5.001 版本起就已成为 Perl 核心的一部分。它已单独发布到 CPAN,以便旧版本安装可以从错误修复中受益。
此软件包与 Perl 核心具有相同的版权和许可证。