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

时间:2015-07-06 13:25:12

标签: perl packages perl-module

我有一个文件夹 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脚本的位置而不对其进行硬编码...

我阅读了thatthat以及that等主题,但无法弄清楚这是如何运作的。我不想要的是需要手动设置环境变量或类型。这只是问题的另一个来源。

2 个答案:

答案 0 :(得分:3)

我们正在寻找的是FindBin模块。

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

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

(您还应该启用strictwarnings

答案 1 :(得分:0)

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

$main::dirName