我最近编写了一个新的 Perl 脚本,用于根据进程名称/用户名终止进程,并使用类对其进行扩展,以便我可以在其他程序中重用该进程代码。我当前的布局是 -
/home/mutew/src/prod/pskill <-- Perl script
/home/mutew/src/prod/Process.pm <-- Package to handle process descriptions
我在 $PATH 变量中添加了 ~/src/prod 以便从任何地方访问脚本。从驻留目录以外的任何目录运行脚本都会导致“无法在 @INC 中找到 Process.pm”(这是可以理解的,因为除了/usr 中的共享目录之外,@INC 仅包含当前目录 - '.')。我一直在使用的一种解决方法是使用 lib 指令 -
use lib '/home/mutew/src/prod';
但这是一个主要的可移植性问题。有什么解决方案可以让我将脚本导出到其他系统而无需更改?
<小时/>编辑
- 我选择“depesz”作为正确答案,因为它简单且使用了核心模块。 brian d foy 的回答虽然提出了其他方法来完成相同的任务(TMTOWTDI),但他在 perlfaq8 中的贡献使这个问题绝对多余。
最佳答案
我很好奇为什么这个简单的解决方案
use File::Basename;
use lib dirname (__FILE__);
use SomeModuleLocatedInTheSameDirectoryAsThisPerlScriptOrModule;
没有出现。如果文件不是主要的可执行 Perl 脚本,而只是一个不可执行的 Perl 模块,则 FindBin 模块似乎存在一些问题。至少我是这样解释 documentation 中的评论的。 。没有真正测试过。
要获得与此 Perl 文件位置相关的任何其他路径,请执行类似的操作
use File::Basename;
use lib dirname (__FILE__) . "/MyModules";
关于perl - 我的 Perl 脚本如何在同一目录中找到其模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/728597/