使用本地 Perl 模块而不是 CPAN 安装的模块

Using local Perl module instead of one installed by CPAN

我发现有必要扩展 CPAN 模块。 (Unicode::CharName 升级到 Unicode 4.1;我需要一些来自 Unicode 5.0 和 5.1 的字符)。

我已经进行了必要的更改并拥有了自己的 CharName.pm 模块。

我现在想在我的各种 Perls 中使用它。我目前使用:

我应该把我的 Unicode::CharName 版本放在哪里,以便它覆盖 CPAN 安装的版本?

我不想更改当前

的任何脚本
use Unicode::CharName;

使用 cpanm 你可以下载模块,打补丁,然后正常安装:

$ cpanm --look Unicode::CharName
# new shell opens
$ patch lib/Unicode/CharName.pm custom.patch # or whatever process
$ perl Makefile.PL
$ make install
$ exit

您也可以将它安装到 local::lib 以避免全局覆盖它,方法是将 -l local/ 选项添加到 cpanm 命令。然后你可以将这个 local::lib 的绝对路径添加到你的 PERL5LIB 或通过 -Iuse lib。如果您为 -l 选项指定 /path/to/local,它将是 /path/to/local/lib/perl5

手动复制文件而不是通过正常的安装过程可能会导致问题。许多发行版依赖于安装过程来正确构建模块。此外,您需要为每个要使用它的 Perl 单独安装该模块;安装的 Perl 模块在 Perl 版本或架构之间通常 cross-compatible。 (一个严格简单的 pure-Perl 模块可以是这些规则的例外,但我觉得以这种方式滥用的唯一模块是 App::cpanminus,因为它就是为此而设计的。)