Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Windows上更新Perl而不丢失模块?_Windows_Perl_Upgrade_Perl Module - Fatal编程技术网

如何在Windows上更新Perl而不丢失模块?

如何在Windows上更新Perl而不丢失模块?,windows,perl,upgrade,perl-module,Windows,Perl,Upgrade,Perl Module,在工作中,我在Windows上使用Perl5.8.0 当我第一次安装Perl时,我去了CPAN,下载了所有的源代码,做了一些更改(在.MAK文件(?)中以支持线程,或者类似的事情),然后做了nmake/nmake test/nmake install。然后,一点一点地,我从CPAN下载了各个模块,并完成了nmake舞蹈 因此,我想升级到更新的版本,但新版本不能破坏任何现有脚本。值得注意的是,我安装的一堆“使用”模块必须安装在新版本中 更新我的当前版本最可靠(也是最简单)的方法是什么,以确保在更新

在工作中,我在Windows上使用Perl5.8.0

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

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


更新我的当前版本最可靠(也是最简单)的方法是什么,以确保在更新后我对nmake dance所做的一切仍然存在?

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

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

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


我不确定我是否完全理解你的要求。您是否有对5.8 makefile所做更改的列表?或者问题是如何获得这样一份清单?您是否也在询问如何找出您从CPAN获得的基础安装之上的哪些软件包?您是否也在询问如何测试您的自定义更改不会再次从CPAN中获得这些包吗?

< P>我会认真考虑使用.< /P> < P>您可以在另一个位置安装Perl的第二个版本。您必须将任何非核心模块重新安装到新版本中。一般来说,不同版本的Perl不兼容二进制文件,如果您有任何使用XS组件的程序特定库,这可能是一个问题。纯Perl模块不应受到影响。

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

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

听上去,我想你是在Windows上,在这种情况下,当前的@INC路径可以通过

perl -le "print for @INC"
确保将新的Perl版本放在另一个目录中。它将愉快地共存 这将允许您选择使用哪个Perl安装;这只是一个整理路径顺序的问题。一旦启动Perl解释器,它就知道在哪里查找其余模块


草莓Perl可能是目前Windows上最适合自己使用的发行版。

正如其他人所指出的,首先在单独的地方安装新的Perl。我安装了几个管道,每个管道与其他管道完全分开

要做到这一点,您必须自己配置和编译源代码。运行
configure
时,您将有机会指定安装程序。我在年的“编译我自己的Perl”中对此给出了详细的说明。在有效的Perl编程中还有一个项目向您展示了如何做到这一点

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

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

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

至于,除了默认位置之外,还有一个“可移植”版本可以安装。这样,您就可以在可移动媒体上使用新的perl。您可以在任何地方测试它,而不干扰本地安装。但我不认为它已经可以广泛使用了。该工具可能会帮助您管理这一点


祝你好运,:)

我想这个问题的答案包括:

  • 设置当前实时计算机的精确副本。升级Perl,使用与您目前使用的相同的目录位置和结构
  • 在新映像上测试脚本
  • 一旦你高兴了,打开开关
  • 这背后的想法是,可能有各种微妙的依赖关系和假设,你没有想到。虽然不太可能,但与您正在使用的模块相比,特定模块的最新版本(甚至可能是核心模块,尽管这种可能性更大)可能会有细微的差异。除非您已经详尽地浏览了整个代码库,否则很可能只有在某些情况下才需要一个特定的模块

    您可以尝试通过构建一个所有脚本的列表来发现这一点,这个列表无论如何都应该有,因为您的所有代码都处于版本控制之下(您正在使用版本控制,例如,是吗?),并在其中迭代,在每个脚本上运行
    perl-c
    。例如。这种自动化测试是无价的:你可以设置它运行,出去喝杯咖啡或其他什么,然后回来检查是否一切正常。最初几次你可能会发现一个你忘记的模组