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

标签 perl module directory

我最近编写了一个新的 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';

但这是一个主要的可移植性问题。有什么解决方案可以让我将脚本导出到其他系统而无需更改?

<小时/>

编辑

  1. 我选择“depesz”作为正确答案,因为它简单且使用了核心模块。
  2. 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/

相关文章:

perl - 生成 "dynamic"网站静态版本的最佳方式

string - 如何获取字符串开头对应字符的个数

C++/C : Move Directory to Another Location

python - 遍历每日转储目录

arrays - 如何在子例程中传递数组的哈希值?

linux - cURL 不发送文件数据

python - 尽管已安装,但我得到 'ImportError: No module named web'

c - 在启动时自动加载模块和目标文件

Ruby:如果找不到类方法,则在模块中引发错误

windows - 在 Windows 上删除一个非常非常深的子目录树?