这段代码在 Perl 5.8 下的行为与在 Perl 5.12 下的行为不同:
my $badcode = sub { 1 / 0 };
print "Made it past the bad code.\n";
当我在 5.8 下运行它时,即使我从未执行过除法,也会出现错误:
[brock@chase tmp]$ /usr/bin/perl -v 这是为 i486-linux-gnu-thread-multi 构建的 perl,v5.8.8 [brock@chase tmp]$ /usr/bin/perl badcode.pl 在 badcode.pl 第 1 行非法除以零。 [brock@chase tmp]$ /usr/local/bin/perl -v 这是为 i686-linux 构建的 perl 5,版本 12,subversion 0 (v5.12.0) [brock@chase tmp]$ /usr/local/bin/perl badcode.pl 使它通过了错误的代码。
在 perl 5.10.1 下,它的行为与 5.12 下一样:
brock@laptop:/var/tmp$ perl -v 这是为 i486-linux-gnu-thread-multi 构建的 perl,v5.10.1 (*) brock@laptop:/var/tmp$ perl badcode.pl 使它通过了错误的代码。
我使用命名子程序得到相同的结果,例如
sub badcode { 1 / 0 }
我在 perl5100delta pod 中没有看到任何关于此的内容。这是一个未记录的更改吗?其他一些变化的意外副作用?(作为记录,我认为 5.10 和 5.12 正在做正确的事情。)