Bu kod biraz Perl 5.8 nedeniyle farklı davranışlar o Perl 5.12 altında olduğundan daha:Perl'in 5.8'e karşı 5.10 ve 5.12 için altprogramlarda kodun gecikmeli değerlendirilmesindeki fark nedir?
[[email protected] tmp]$ /usr/bin/perl -v This is perl, v5.8.8 built for i486-linux-gnu-thread-multi [[email protected] tmp]$ /usr/bin/perl badcode.pl Illegal division by zero at badcode.pl line 1. [[email protected] tmp]$ /usr/local/bin/perl -v This is perl 5, version 12, subversion 0 (v5.12.0) built for i686-linux [[email protected] tmp]$ /usr/local/bin/perl badcode.pl Made it past the bad code.: Ben 5.8 altında çalıştırmak
my $badcode = sub { 1/0 };
print "Made it past the bad code.\n";
, ben asla bölünme yürütmek halde bir hata alıyorum
[email protected]:/var/tmp$ perl -v This is perl, v5.10.1 (*) built for i486-linux-gnu-thread-multi [email protected]:/var/tmp$ perl badcode.pl Made it past the bad code.Ben isimlendirilmiş bir alt, örneğin aynı sonuçları elde: perl 5.10.1 altında
, bunun 5.12 altında gibi davranır
sub badcode { 1/0 }
Perl5100delta bölmesinde bu konuda hiçbir şey göremiyorum. Bu belgelenmemiş bir değişiklik mi? Başka bir değişikliğin istenmeyen bir yan etkisi? (Kayıt için, ben 5.10 düşünmek ve 5.12 Doğruyu yapıyoruz.)
Cevabı bilmiyorum ama Perl 5.10+ 'nin '1/0' gibi ön hesaplamalar gibi sözcüksel optimizasyonları da ertelediği görülüyor. Her iki şekilde de "Doğru Olan" kabul edilirse emin değilim. – spoulson