在工作中我在Windows上使用Perl 5.8.0。

当我第一次打开Perl时,我去了CPAN,下载了所有的源代码,做了一些更改(在.MAK文件中?支持线程,或类似的东西),并做了nmake / nmake test / nmake install 。然后,我一点一点地从CPAN下载了各个模块并完成了nmake舞。

所以,我想升级到更新版本,但新版本不能破坏任何现有脚本。值得注意的是,一堆“使用”。我安装的模块必须安装在新版本中。

更新我当前版本最可靠(也是最简单)的方法是什么,确保我在更新后仍然使用nmake跳舞的所有内容?

有帮助吗?

解决方案

正如其他人所说,首先将新的perl安装在一个单独的位置。我安装了几个perls,每个都与其他所有perls完全分开。

要做到这一点,您必须自己配置和编译源代码。运行 configure 时,您将有机会指定安装程序。我在“Compiling My Own Perl”中详细说明了这一点。在 2008年春季期的Perl评论中。 Effective Perl Programming 中还有一个项目,向您展示如何操作。

现在,返回原始发行版并运行 cpan -a 以创建自动提交文件。这是一个Pod文档,列出了您安装的所有额外内容,CPAN.pm了解如何使用它来重新安装所有内容。

要在新的perl中安装东西,请使用该perl的路径启动CPAN.pm并安装您创建的自动捆绑文件。 CPAN.pm将从perl的配置中获得正确的安装路径。

观察输出以确保顺利进行。此过程不会安装相同版本的模块,而是安装最新版本。

对于 Strawberry Perl ,有一个“便携式”消息。你可以在默认位置以外的地方安装版本。这样你就可以在可移动媒体上使用新的perl。您可以在任何地方进行测试,而不会干扰本地安装。我不认为它已经为一般用途做好了准备。 Berrybrew 工具可以帮助您管理它。

祝你好运,:))

其他提示

我会认真考虑使用 Strawberry Perl

您可以在其他位置安装第二版Perl。您必须将任何非核心模块重新安装到新版本中。通常,不同版本的Perl不是二进制兼容的,如果您有任何使用XS组件的程序特定库,这可能是一个问题。纯Perl模块不应受到影响。

如果您保持在5.8轨道内,则所有包含XS(二进制)扩展的已安装模块将继续工作,因为二进制兼容性在同一5.8系列中得到保证。如果您移动到5.10,则必须重新编译包含XS组件的任何模块。

您需要做的就是确保新版本在其@INC数组(用于查找模块)中列出以前的include目录。

通过它的声音,我认为你在Windows上,在这种情况下,可以用

查看当前的@INC路径
perl -le "print for @INC"

确保将新的Perl版本定位到另一个目录中。它会愉快地共存 使用以前的版本,这将允许您选择使用哪个Perl安装;这只是让您的PATH订单整理出来的问题。一旦perl解释器启动,它就知道在哪里寻找其余的模块。

草莓Perl可能是最近在Windows上推出的最好的发行版。

我认为对此的答案涉及虚拟化

  1. 设置当前直播机的精确副本。升级Perl,使用与您目前使用的目录位置和结构相同的目录。
  2. 浏览您在新图片上测试它们的脚本。
  3. 一旦你开心,请翻开开关。
  4. 这背后的想法是,你可能没有想到各种微妙的依赖和假设。虽然不太可能,但特定模块的最新版本(可能甚至是核心模块,尽管更不可能)可能与您使用的模块相比有微妙的差异。除非你已经详尽地浏览了整个代码库,否则很可能只有在特定情况下才需要特定的模块。

    您可以通过构建所有脚本的列表来尝试发现这一点 - 无论如何,您应该拥有的列表,所有代码都在版本控制下(您 使用版本控制,例如, Subversion ,是吗?) - 并通过它迭代,运行 perl -c 在每个脚本上。例如此脚本。这种自动化测试是非常宝贵的:你可以设置它运行,去咖啡或其他什么,然后回来检查一切是否有效。前几次你可能会发现一个你忘记的模糊模块,这很好:自动化这一点的全部意义在于不需要做苦差事检查每个脚本。

当我这样做时,我将较新的一个安装到一个单独的目录中。运行两个版本会有一些混乱,但它确实有助于确保一切正常工作,并提供一种快速切换回旧版本的方法。我还设置了Apache来运行两个独立的服务,所以我可以在一个服务中使用新的Perl,而无需接触旧Perl上的生产服务。

事后看来,安装在单独的计算机上并在那里进行测试可能会更加明智。记录您需要进行的每个配置更改。

不确定自己构建它—我总是只使用Windows的预先打包的二进制文件。

我不确定我到底知道你在问什么。您是否有对5.8 makefile所做的更改列表?或者问题是如何获得这样的清单?您是否还在询问如何找出您从CPAN获得的基本安装之上的哪些包?您是否也在询问如何测试您的自定义更改是否会破坏这些包,如果您再次从CPAN获取它们?

为什么不使用ActivePerl及其“ppm”?工具(重新)安装模块?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top