将perl从5.6升级到5.24

use*_*500 7 perl upgrade perl-module mod-perl2

我们目前在我们的组织中使用5.6版本的perl,以及MySQL和Apache,但现在客户端希望将perl升级到v5.24.

在开始升级之前,必须记住哪些主要变化和关键点?

我冲浪了很多但是从5.6到5.24没有找到任何有趣的东西.

是否可以从这么低的版本升级到高级版本.

Dra*_*oan 14

如果您转到CPAN,您选择的版本(在您的情况下为5.24.0 Perl 5.24.0),并在文档部分向下看,有很多perlXXXdelta链接.这些文件描述了修订之间的更改,更重要的是它们详细说明了不兼容的更改.你也可以在网上找到这些.

版本5.24.0详细说明了其中的更改pod/perldelta.pod.

有许多显着的差异:

  • 5.8更改了二进制格式,因此必须重新编译.XS模块.
  • 5.8移至PerlIO进行核心IO操作.
  • 5.8改变了宽字符串的工作方式.这改变了角色use utf8.
  • 5.10制作unpack()mkdir()默认使用$_
  • 5.10退休$*$#
  • 5.10就是这样$AUTOLOAD,现在printfsprintf是可以修饰的
  • 5.12重新排序@INC以允许核心模块升级
  • 5.12 blesses文件句柄到 IO::File
  • 5.12 suidperl被丢弃
  • 5.12已弃用 UNIVERSAL->import()
  • 5.14是另一个二元不兼容的变化
  • 5.14更改glob句柄的引用.
  • 5.14 local($_)剥离所有魔法$_
  • 5.14 :=成了语法错误
  • 5.18哈希排序比以前更难以预测
  • 5.18 \s现在匹配\cK(垂直标签)
  • 5.18 readline()$/ = \N现在读取N个字符,而不是N个字节
  • 5.20 do SUBROUTINE(LIST)成了语法错误
  • 5.20对于某些数据结构,Data::Dumper输出已经改变
  • 5.24词法$_被删除
  • 5.24 chdir('')不再将目录更改为home

我建议你仔细阅读这些文件(考虑到你的巨大版本,它会让你忙碌!).如果您对代码库及其使用的perl功能有很好的了解,则尤其如此.这至少应该让您了解在迁移到更高版本时可能遇到的潜在陷阱.

我还要补充一点,鲍罗丁的答案值得一读,因为它详细介绍了处理升级的一个非常好的方法.我完全同意他的建议,尤其是单元测试 - 这是增加移民成功信心的可靠方法.如果您没有单元测试,那么这将是介绍它们的绝佳时机,并且能够证明为您的组织创建它们所花费的时间.

  • 很好的答案.谢谢你的总结 (2认同)

Bor*_*din 9

我认为对差异进行自我教育将是有用的,但是没有办法处理所有增量文件并检查所有来源是否存在差异

希望您的软件套件有单元测试.如果没有,那么现在了解它们为什么有用,并为您拥有的所有内容编写全面的测试

使你的版本控制系统叉子,并添加use strictuse warnings 'all'每一个源文件的顶部,如果他们不是已经存在.运行您的测试套件,直到所有内容仍然编译并在Perl v5.5下完美运行

在测试系统上安装Perl v5.24并调整源,直到它们通过每个测试

Perl 5的工作人员在保持向后兼容性方面表现出色,但几乎肯定会有一些伤亡

如果您有信心,请将新版本直播.会有更多的失败,对于每一个,你必须在测试套件中编写一个新的测试

我希望这会顺利