我的Perl脚本如何在同一目录中找到它的模块?

前端之家收集整理的这篇文章主要介绍了我的Perl脚本如何在同一目录中找到它的模块?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近写了一个新的Perl脚本来杀死基于进程名/用户名的进程,并使用Classes扩展它,以便我可以在其他程序中重用该进程代码。我目前的布局是 –
/home/mutew/src/prod/pskill       <-- Perl script
/home/mutew/src/prod/Process.pm   <-- Package to handle process descriptions

我在我的$ PATH变量中添加〜/ src / prod从任何地方访问脚本。从任何目录而不是其常驻目录运行脚本导致“无法找到Process.pm在@INC”(这是可以理解的,除了/ usr中的共享目录,@INC只包括当前目录 – ‘。’)。我一直使用的一种解决方法是使用lib指令如此 –

use lib '/home/mutew/src/prod';

但这是一个主要的可移植性问题。任何解决方案,也将允许我将脚本导出到其他系统没有和更改?

编辑

>我选择了“depesz”答案作为正确的答案,因为它的简单性和核心模块的使用。
> brian d foy的回答虽然建议其他方法来完成相同(TMTOWTDI),他在perlfaq8的贡献使这个问题绝对多余。

解决方法

最简单的方法我发现它使用FindBind模块。喜欢这个:
use FindBin;
use lib $FindBin::Bin;

通常我喜欢让我的脚本以这样的方式提供,程序在任何/ bin,库在任何/ lib

在这些情况下,我使用稍微更复杂的方法

use Cwd qw(abs_path);
use FindBin;
use lib abs_path("$FindBin::Bin/../lib");

abs_path调用是使@INC包含任何/ lib,而不是任何/ bin /../ lib – 它只是一个微小的变化,但使阅读错误消息更容易。

原文链接:https://www.f2er.com/Perl/173365.html

猜你在找的Perl相关文章