微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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修正了.

原文地址:https://www.jb51.cc/Perl/172600.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐