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

标签 perl package 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 脚本的位置而不对其进行硬编码...

我阅读了类似 that 的主题和 thatthat但无法真正弄清楚这是如何工作的。我不想要的是需要手动设置环境变量或类型。这只是问题的另一个根源。

最佳答案

我认为您正在寻找的是 FindBin模块。

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

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

(您还应该启用严格警告)

关于perl - 使用包时全局使用工具位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31247104/

相关文章:

linux - 添加从特定 Ips 生成的总累积数据

android - WebView 流量监控器

python - 在子包之间共享模块的最佳实践是什么?

perl-module - 在非标准位置安装 Perl 6 模块

windows - Perl 5.12 使用为 Perl 5.6 创建的 DLL 加载模块

perl - 线程与 fork (解释我想要做什么)

perl - DBI:quote_identifier 和列

perl - 错误消息:无法对未定义的值调用方法“做”

mysql - Perl将许多插入语句插入mysql数据库

r - 一次加载多个包