使用包时全局使用工具位置

Global usage of tool location while using packages

我有一个文件夹 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 and that and that 之类的主题,但无法真正弄清楚它是如何工作的。我不想要的是需要手动设置环境变量或那种。那只是问题的另一个来源。

我想你要找的是 FindBin 模块。

它允许您包含与当前位置相关的内容,如下所示:

use FindBin;
use lib $FindBin::RealBin. "../mod_path";
use myModul;

(您还应该打开 strictwarnings

要访问另一个包中的变量,您需要在提及中包含该包。

$main::dirName