Perl:将自定义模块从本地 .pm 文件“安装”到 Perl 执行环境中?

问题描述

这里的 Perl 新手很少有时间和支持来学习 Perl,但管理层希望像 Perl Pro 一样使用它 :)

我在 Cygwin (windows 10) 下使用 Perl (v5.30.2 by Larry Wall)

我的开发人员发布了一个新脚本,该脚本现在使用了我没有的 Perl 模块。
然后他们向我发送了 .pm 文件(他们自己编写的,不在任何在线 Perl 存储库中)。

我无法使用 CPAN 将该文件安装到我的 Perl 执行环境中。

  1. .pm 文件应该保存在哪里? (请指定确切的文件夹)
  2. 如何告诉 CPAN 安装此文件以供使用?理想情况下,这是一次性的事情,因为我不想忘记安装这个文件,如果我每次需要运行 Perl 脚本时都必须这样做...
  • 以防万一亲爱的回答者可能有任何安全问题:这里没有任何安全问题,这一切都是在没有连接到互联网的环境下进行的。

解决方法

Perl 模块只是一个文件(或文件的集合)。您不必将它们放在任何特殊的地方,但您需要告诉 Perl 在哪里可以找到它们。

当您使用裸字调用 userequire 时,Perl 会将该模块名称(如 Some::Module)翻译成 Some/Module.pm(或其他任何内容)适合您的系统。还有人在使用 VMS 吗?)。

一旦它具有模块的文件名形式,它就会在 @INC 的目录中查找该子路径。它尝试第一个目录。如果它没有找到它,它就会移动到下一个,依此类推。这些目录是在有人配置和安装 Perl 时决定的。并且,在 v5.26 之前,它包含当前工作目录(参见 v5.26 removes dot from @INCDoesn't Perl include current directory in @INC by default?

但是,您可以告诉 Perl 去哪里查看。 perlfaq8How do I add a directory to my include path (@INC) at runtime?。池上还在评论中显示了FindBin (How do I add the directory my program lives in to the module/library search path?)。

除此之外,您可以告诉 require 加载一个路径,尽管您需要确保该程序可以找到该路径,即使有人从另一个目录运行它

 require './this_file/over/here';
 require '/usr/local/lib/this_file/over/here';