使用自制软件升级 Perl 版本时如何最好地处理以前安装的模块

How best to handle previously installed modules when upgrading Perl version with homebrew

我 运行 经常进入这个:我 运行 一个 brew install foobar 结果,Perl 版本得到更新。每当发生这种情况时,我安装的 Perl 模块就再也找不到了,因为它们安装在 /usr/local/Cellar/perl/5.32.0/lib/perl5/site_perl/5.32.0/ 中,而新版本现在正在 /usr/local/Cellar/perl/5.32.0/lib/perl5/site_perl/5.32.1_1/.

中查找

我 have/had 以前版本安装了大量模块,我宁愿不重新安装所有模块(至少手动安装)。让以前安装的模块与新的 Perl 版本一起工作的最佳方法是什么?

对于上面这么小的版本更改,我大概可以将所有文件从 5.32.0 目录复制到 5.32.1_1 目录,但最好有一个更通用的 and/or 版本变化较大时的稳健解决方案。

cpan命令可以制作一个“自动捆绑”文件。您将使用之前安装的 cpan 来执行此操作:

$ cpan -a
Creating autobundle in /Users/brian/.cpan/Bundle
Reading '/Users/brian/.cpan/Metadata'
  Database was generated on Fri, 19 Mar 2021 05:41:03 GMT

Package namespace         installed    latest  in CPAN file
Algorithm::C3                  0.11      0.11  HAARG/Algorithm-C3-0.11.tar.gz
Algorithm::Cron                0.10      0.10  PEVANS/Algorithm-Cron-0.10.tar.gz
Algorithm::Diff              1.1903     1.201  RJBS/Algorithm-Diff-1.201.tar.gz
...
version::regex               0.9924    0.9928  LEONT/version-0.9928.tar.gz
vmsish                         1.04      1.04  SHAY/perl-5.32.1.tar.gz
warnings                       1.47      1.47  SHAY/perl-5.32.1.tar.gz
warnings::register             1.04      1.04  SHAY/perl-5.32.1.tar.gz

Wrote bundle file
    /Users/brian/.cpan/Bundle/Snapshot_2021_03_20_00.pm

在该文件的顶部,有安装说明。使用新安装的 cpan 来处理这部分:

package Bundle::Snapshot_2021_03_20_00;

$VERSION = '0.01';

1;

__END__

=head1 NAME

Bundle::Snapshot_2021_03_20_00 - Snapshot of installation on otter on Sat Mar 20 00:19:35 2021

=head1 SYNOPSIS

perl -MCPAN -e 'install Bundle::Snapshot_2021_03_20_00'

虽然我很少这样做。当我安装一个新的 perl 并想在其上使用一个新项目时,我安装了该项目。该项目安装它需要的任何东西。我喜欢全新的开始,而不是继承我可能不再使用的东西。

此外,请注意 cpan 会安装您所要求的最新版本。如果您需要特定版本,cpanm 更容易处理。而且,在这种情况下,您可以考虑使用 cpanfile 来准确锁定您想要的内容。