Perl的lib pragma如何工作?

时间:2010-04-07 14:49:20

标签: perl

我使用use lib "./DIR"从其他地方的文件夹中获取库。但是,它似乎不适用于我的服务器,但它在我的本地桌面上工作正常。 有什么特别的原因吗?

还有一个问题,use lib是否会在几个模块中传播?

两种情况: 假设我创建了一个需要几个库的基类,但我知道它需要扩展,扩展类需要使用另一个库。我可以将use lib命令放在基类中吗?还是我需要把它放在每个扩展课程中?

最后,我可以只有一个use package包中包含一堆use lib,它会将use lib语句传播到我当前的模块吗? < - 我不这么认为,但反正要求

2 个答案:

答案 0 :(得分:3)

.语句中的use lib表示“当前工作目录”,仅在从正确的目录运行脚本时才有效。服务器对cwd的想法可能是不同的(或未定义的)。假设库目录与脚本位于同一位置并且是私有的,你想要做这样的事情:

use FindBin;
use lib "$FindBin::Bin/DIR";

use lib语句会影响@INC - 当userequire模块时,perl搜索的位置列表。它全局影响解释器的当前实例。您实际上只应将use lib语句放在脚本中,而不是放在模块中。

原则上,在使用这些位置中的任何软件包之前,您可以拥有一个由package MyLibs个语句组成的use lib,然后是use MyLibs,但我不建议这样做它

答案 1 :(得分:2)

如果没有更多信息,无法知道为什么它无法在您的服务器上运行。特别是,检查服务器的错误日志,并在必要时将@INC转储到某处,并将其与实际的库路径进行比较。

use lib修改@INC,这是全局的,所以只要您在其他软件包尝试包含内容之前执行use lib,它就可以运行,所有其他软件包都会看到新的包括路径。

有关@INC的更多信息,请参阅perlvar中的条目。