我使用use lib "./DIR"
从其他地方的文件夹中获取库。但是,它似乎不适用于我的服务器,但它在我的本地桌面上工作正常。
有什么特别的原因吗?
还有一个问题,use lib
是否会在几个模块中传播?
两种情况:
假设我创建了一个需要几个库的基类,但我知道它需要扩展,扩展类需要使用另一个库。我可以将use lib
命令放在基类中吗?还是我需要把它放在每个扩展课程中?
最后,我可以只有一个use package
包中包含一堆use lib,它会将use lib语句传播到我当前的模块吗? < - 我不这么认为,但反正要求
答案 0 :(得分:3)
.
语句中的use lib
表示“当前工作目录”,仅在从正确的目录运行脚本时才有效。服务器对cwd的想法可能是不同的(或未定义的)。假设库目录与脚本位于同一位置并且是私有的,你想要做这样的事情:
use FindBin;
use lib "$FindBin::Bin/DIR";
use lib
语句会影响@INC
- 当use
或require
模块时,perl搜索的位置列表。它全局影响解释器的当前实例。您实际上只应将use lib
语句放在脚本中,而不是放在模块中。
原则上,在使用这些位置中的任何软件包之前,您可以拥有一个由package MyLibs
个语句组成的use lib
,然后是use MyLibs
,但我不建议这样做它
答案 1 :(得分:2)
如果没有更多信息,无法知道为什么它无法在您的服务器上运行。特别是,检查服务器的错误日志,并在必要时将@INC
转储到某处,并将其与实际的库路径进行比较。
use lib
修改@INC
,这是全局的,所以只要您在其他软件包尝试包含内容之前执行use lib
,它就可以运行,所有其他软件包都会看到新的包括路径。
有关@INC
的更多信息,请参阅perlvar中的条目。