内容

名称

lib - 在编译时操作 @INC

概要

use lib LIST;

no lib LIST;

描述

这是一个小型简单的模块,简化了在编译时操作 @INC 的过程。

它通常用于向 Perl 的搜索路径添加额外的目录,以便后续的 userequire 语句能够找到不在 Perl 默认搜索路径上的模块。

向 @INC 添加目录

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 中添加目录。如果你需要从 @INC 中删除目录,请确保只删除你自己添加的目录,或者确保你的脚本中其他模块不需要这些目录。其他模块可能添加了它们正常运行所需的目录。

no lib 语句会从 @INC 中删除所有名为目录的实例。

对于 LIST 中的每个目录(这里称为 $dir),lib 模块还会检查是否存在名为 $dir/$archname/auto 的目录。如果存在,则认为 $dir/$archname 目录是相应的体系结构特定目录,也会从 @INC 中删除。lib.pm 还会检查是否存在名为 $dir/$version 和 $dir/$version/$archname 的目录,并从 @INC 中删除这些目录。

恢复原始 @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 核心具有相同的版权和许可证。