【问题标题】:Using local Perl module instead of one installed by CPAN使用本地 Perl 模块而不是 CPAN 安装的模块
【发布时间】:2019-11-28 20:19:54
【问题描述】:

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

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

我现在想将它与我的各种 Perls 一起使用。我目前使用:

  • Windows 版草莓 Perl
  • 用于 Windows MINGW64 的 git;我的 .bashrc 集 $PATH 到 Strawberry perl 和 $PERL5LIB=/c/Strawberry/perl/vendor/lib:/c/Strawberry/perl/site/lib
  • WSL Ubuntu

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

我不想更改当前的任何脚本

use Unicode::CharName;

【问题讨论】:

  • 你可以使用核心模块charnamesviacode。 Perl 5.10 和 5.2 在 5.12 中添加了对 Unicode 5.0 的支持。 (Perl 5.30 支持 Unicode 12.1。)
  • "我应该把我的 Unicode::CharName 版本放在哪里" 为你的模块写一个简单的Makefile.PL,查看ExtUtils::MakeMaker 然后运行perl Makefile.PL; make; make install 它应该覆盖原来的模块。
  • @ikegami,1)我不想更改调用脚本。 Unicode::CharName 也给了我 Unicode 块名称。
  • 给潜在回答者的注意事项:这个问题已经在perlmonks.org/?node_id=11103047交叉发布到 PerlMonks

标签: perl cpan


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-30
    • 2011-10-27
    • 1970-01-01
    • 2016-07-11
    • 2020-05-07
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多