Perl版本中后向不兼容性的一些具体示例是什么?

公开发布Perl 1.0(1987年12月18日)和当前稳定版本5.10.1(2009)之间已经有22年了.

在这22年中,出现了以下显着的发布:

> Perl 1.0(1987 – 初始版本)
> Perl 2(1988 – 更好的正则表达式)
> Perl 3(1989 – 支持二进制数据流)
> Perl 4(1991 – 识别骆驼书中描述的Perl版本)
> Perl 5(1994年 – 主要修改介绍,接近完整翻译)
> Perl 5.6(2000 – 64位支持,unicode字符串,大文件支持)
> Perl 5.8(2002 – 改进的unicode支持,新的IO实现)
> Perl 5.10(2007 – 新开关语句,正则表达式更新,智能匹配运算符)

我正在寻找Perl历史中向后不兼容的具体例子.

题:

>在Perl的22年历史中,有没有Perl向后不兼容的例子,Perl源代码针对Perl X版本不会在Y版本(其中Y> X)下运行?

请尽可能包含参考和代码示例.

解决方法

最大的故意不兼容之一是在Perl 4和Perl 5之间改变的阵列插值.
my @example = qw(1 2 3);
print "foo@example.com";

在Perl 4中将是:

foo@example.com

在Perl 5中将是:

foo1 2 3.com

幸运的是,如果阵列不存在,Perl会警告您有关“可能的意外插补”.

线程在5.005和5.6之间发生了很大变化. “5005线程”使用所有全局数据共享的传统POSIX线程模型.虽然理论上这是更快的,因为那时Perl只能使用POSIX线程,这是Perl编码器的一个噩梦.大多数Perl模块不是线程安全的.它从来没有真的很好.

在5.6中,ActiveState和其他人在Windows上做了fork().当您在Windows上使用fork()时,Perl将创建一个解释器对象的副本并运行两个口译的操作码.这被称为“多重性”.

在5.8中,亚瑟·伯格曼(Arthur Bergman)跑了,用它来创建ithreads.因为多重性正在模拟单独的进程,所以默认情况下不会共享数据.只有您所说的数据是共享的.这使得它们使用起来更安全,尽管在使用电脑之前需要很长时间.像Elizabeth Mattijsen和Jerry Hedden这样的人就这样做了.

5005线最终在5.10.0中被清除.存在兼容性层,但我怀疑它将在生产代码中真正有效.

另一个很大的不兼容性在5.6和5.8之间引起了Unicode. Unicode在5.6爆炸.字符串是否是Unicode是由周围范围决定的.它在5.8中完全重新设计,所以现在字符串的Unicodeiness与字符串绑定.使用5.6的Unicode编写的代码通常必须在5.8中重写,通常是因为要使5.6的Unicode正常工作,你必须做丑陋的黑客.

最近,5.10.1对智能匹配做了一大堆不兼容的更改.幸运的是,它们是在5.10.0中引入的,所以没有什么大不了的. Perl 6的故事介绍了智能匹配概念,并且被引用到Perl 5的开发版本.时间已经过去,Perl 6的智能匹配思想发生了变化.没有人告诉Perl 5个人,它在5.10.0没有变化. Larry Wall noticed and did the equivalent of OMG YER DOIN IT WRONG!!!新的Perl 6版本看起来更好,所以5.10.1修正了.

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...