2013-01-12 138 views
0

我的web服务器的$HOME中安装了几个perl模块。 Web服务器用于运行perl 5.8.8所以他们下$HOME/perl/lib/perl5/5.8.8/...Perl模块版本

安装在一台服务器迁移,网络托管公司改变perl5.10.1,但我不知道这件事,直到我的脚本启动失败。我设法通过将5.8.8树复制到5.10.1来做一个快速的修复,现在它似乎可以正常工作,但是我希望在将来避免我的脚本失败。

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

我可以添加为您在我的脚本预期的perl版本,并通过电子邮件发送自己,如果它的变化,但为时已晚,届时作为脚本可能已经失败了几次这样我才可以解决这个问题。理想情况下,我想防止脚本失败。

+0

哇,他们将你从一个7岁的Perl版本升级到3.5岁版本? – ysth

回答

5

你真正应该做的是确保你需要的模块都安装在新安装的事情。特别是对于XS(C级)模块,由于内核可能已经改变,因此不保证它们将在不重新编译的情况下在新版本的Perl上运行。

您应该制作一个Makefile.PLBuild.PL,它声明脚本的依赖关系,并且您的公司应将其作为在服务器迁移中执行这些脚本的策略。

最后,是的,你可以检查$^V这是运行的Perl。如果你在BEGIN区块内执行,它将在启动过程中执行。实际上,您可以使用本地目录(纯perl)模块,然后使用lib模块指向它们。

+0

感谢您的建议。幸运的是,所讨论的模块非常小,而不是C,所以我认为我只是复制了树。目前,我已经在我的上层脚本中添加了一个版本号检查,该脚本不使用这些模块,以便它可以提醒我并采取其他操作,而不是让较低级脚本失败。 – appleton

+0

如果在任何'use'语句之前,该检查位于'BEGIN'块中,那么即使在'使用'失败之前,它仍然可以采取一些行动。 –

7

根据您有配置您的环境时,你可能希望使用Perlbrew的灵活性量。

保持在一个特定版本的独立Perl安装。这可以避免在系统级Perl安装更改时出现令人讨厌的意外。

+1

谢谢我只是想补充一点,但你打败了我。 –

+1

Perlbrew FTW !!! – friedo

2

你为什么要移动文件?只需保持添加到PERL5LIB。

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

我强烈建议您只需使用perlbrew在你的home目录下安装Perl的积累,而不是被你的主机的怜悯。