使用包时全局使用工具位置
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;
(您还应该打开 strict
和 warnings
)
要访问另一个包中的变量,您需要在提及中包含该包。
$main::dirName
我有一个文件夹 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;
(您还应该打开 strict
和 warnings
)
要访问另一个包中的变量,您需要在提及中包含该包。
$main::dirName