我有一个文件夹tmp,它位于工具目录中,包含不同的模块,例如myModul.pm:
package myModul;
print "path in myModul.pm: $dirName\n";
这些在 Main 中调用,如下所示:
#!/usr/bin/perl
use strict;
use warnings;
use File::Basename;
use Data::Dumper;
use vars qw($dirName);
BEGIN{
$dirName = dirname(__FILE__);
print "tool location: $dirName\n";
# push @INC, "$dirName/tmp";
}
use lib "$dirName/tmp";
use myModul;
print Dumper \@INC;
路径 dirName 未在 myModul.pm 中正确打印,这是我的问题。如果我删除 package myModul
行,它就可以工作,但这并不是真正的处理它的方法。
我只是想使用 Perl 脚本的位置而不对其进行硬编码...
我阅读了类似 that 的主题和 that和 that但无法真正弄清楚这是如何工作的。我不想要的是需要手动设置环境变量或类型。这只是问题的另一个根源。
最佳答案
我认为您正在寻找的是 FindBin
模块。
它允许您包含与当前位置相关的内容,如下所示:
use FindBin;
use lib $FindBin::RealBin. "../mod_path";
use myModul;
(您还应该启用严格
和警告
)
关于perl - 使用包时全局使用工具位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31247104/