我有一个文件夹 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等主题,但无法弄清楚这是如何运作的。我不想要的是需要手动设置环境变量或类型。这只是问题的另一个来源。
答案 0 :(得分:3)
我们正在寻找的是FindBin
模块。
它允许您包含与当前位置相关的内容,如下所示:
use FindBin;
use lib $FindBin::RealBin. "../mod_path";
use myModul;
(您还应该启用strict
和warnings
)
答案 1 :(得分:0)
要访问另一个包中的变量,您需要在提及中包含该包。
$main::dirName