加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:25:05 所属栏目:大数据 来源:网络整理
导读:我最近写了一个新的Perl脚本来杀死基于进程名/用户名的进程,并使用Classes扩展它,以便我可以在其他程序中重用该进程代码。我目前的布局是 – /home/mutew/src/prod/pskill -- Perl script/home/mutew/src/prod/Process.pm -- Package to handle process de
我最近写了一个新的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 – 它只是一个微小的变化,但使阅读错误消息更容易。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读