【问题标题】:Perl module versionPerl 模块版本
【发布时间】:2013-01-12 13:54:35
【问题描述】:

我的 Web 服务器的 $HOME 中安装了几个 perl 模块。用于运行 perl 5.8.8 的 Web 服务器,因此它们安装在 $HOME/perl/lib/perl5/5.8.8/...

在服务器迁移期间,网络托管公司将perl 更改为5.10.1,但直到我的脚本开始失败时我才知道这一点。我设法通过将5.8.8 树复制到5.10.1 来进行快速的脏修复,现在它似乎工作正常,但我想避免我的脚本将来像这样失败。

即使 perl 版本再次升级,让我的脚本使用本地存储在 5.8.8 文件夹下的模块的最佳方法是什么?

我可以在我的脚本中添加对预期 perl 版本的检查,如果它发生变化,我可以通过电子邮件发送给自己,但是到那时为时已晚,因为在我解决问题之前脚本可能已经失败了好几次。理想情况下,我想防止脚本失败。

【问题讨论】:

  • 哇,他们把你从 7 年前的 perl 版本升级到了 3.5 年前的版本?

标签: perl version perl-module


【解决方案1】:

根据您在配置环境时的灵活性程度,您可能希望使用Perlbrew

维护特定版本的独立 Perl 安装。当系统范围的 Perl 安装发生变化时,这可以避免令人讨厌的意外。

【讨论】:

  • 谢谢,我也想补充一下,但你打败了我。
【解决方案2】:

您真正应该做的是确保在新安装中安装了所需的模块。特别是对于 XS(C 级)模块,由于内核可能已更改,因此无法保证它们无需重新编译就可以在新版本的 Perl 上运行。

您应该创建一个 Makefile.PLBuild.PL 来声明脚本的依赖关系,并且您的公司应该制定在服务器迁移时执行这些脚本的策略。

最后,是的,您可以检查$^V,它是正在运行的 Perl。如果您在 BEGIN 块内执行此操作,它将在启动期间执行。事实上,您可以为您的(纯 perl)模块使用本地目录,然后使用 lib 模块指向它们。

【讨论】:

  • 感谢您的建议。幸运的是,有问题的模块非常小,而不是 C,所以我想我已经摆脱了只是复制树。目前,我在不使用模块的上层脚本中添加了版本号检查,以便它可以提醒我并采取其他措施,而不仅仅是让下层脚本失败。
  • 如果检查在任何use 语句之前的BEGIN 块中,那么即使在use-es 失败之前,它仍然能够采取一些措施。
【解决方案3】:

你为什么要移动这些文件?只需继续添加到 PERL5LIB 即可。

PERL5LIB=$HOME/perl/lib/perl5/5.10.1:$HOME/perl/lib/perl5/5.8.8

我强烈建议您简单地使用perlbrew 在您的主目录中安装 Perl 版本,而不是任由您的主机摆布。

【讨论】:

    猜你喜欢
    • 2013-12-22
    • 2018-02-01
    • 2015-05-20
    • 2012-10-07
    • 1970-01-01
    • 2013-12-17
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多