将perl从5.6升级到5.24

时间:2016-08-12 08:56:33

标签: perl upgrade perl-module mod-perl2

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

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

我经常冲浪,但是从5.6到5.24没有找到任何有趣的东西。

建议从这么低的版本升级到高级版本。

4 个答案:

答案 0 :(得分:13)

如果您选择转到所选版本的CPAN(在您的情况下为5.24.0 Perl 5.24.0),并在文档部分中查看有大量perlXXXdelta个链接。这些文件描述了修订之间的更改,更重要的是它们详细说明了不兼容的更改。您还可以找到这些online

版本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认为$AUTOLOADprintfsprintf现在已被污染
  • 5.12重新排序@INC以允许升级核心模块
  • 5.12将文件句柄保存到IO::File
  • 5.12 suidperl被丢弃
  • 5.12已弃用UNIVERSAL->import()
  • 5.14是另一个二元不兼容的变化
  • 5.14更改glob句柄的引用。
  • 5.14 local($_)$_
  • 中删除所有魔法
  • 5.14 :=成为语法错误
  • 5.18哈希排序甚至比之前less predictable
  • 5.18 \s现在匹配\cK(垂直标签)
  • 5.18 readline() $/ = \N现在读取N个字符,而不是N个字节
  • 5.20 do SUBROUTINE(LIST)成为语法错误
  • 5.20对于某些数据结构,Data::Dumper输出已更改
  • 5.24词法$_已被删除
  • 5.24 chdir('')不再将目录更改为主页

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

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

答案 1 :(得分:8)

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

希望您的软件套件有单元测试。如果没有,那么现在就要了解它们为什么有用,并为你拥有的所有东西编写全面的测试

在您的版本控制系统中设置一个分支,并将use strictuse warnings 'all'添加到每个源文件的顶部(如果它们尚未存在)。运行您的测试套件,直到所有内容仍然编译并在Perl v5.5下完美运行

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

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

当您有信心时,请使用新版本。会有更多的失败,每一个你都必须在测试套件中编写一个新的测试

我希望一切顺利

答案 2 :(得分:2)

如果您查看CPAN上的release page on for Perl 5.24,您会发现该文档包含许多名为" perl5xxxdelta"的文件。这些是每个新版Perl的发行说明。它们包含自上一版Perl以来所有内容都已更改的详细信息。

5.6到5.24是一个巨大的飞跃(大约30个版本!)我可以看到你未来的很多阅读!

也许将来您会意识到保持软件版本更新的重要性: - )

答案 3 :(得分:2)

  

建议从这么低的版本升级到高级版本。

绝对是的。 Perl 5团队非常努力地去除错误并为每个Perl版本添加功能,同时通过Perl 5的每个版本保持100%向后兼容性

如果您遇到任何问题,那将是因为可疑代码或因为新推荐的语法而发出警告