benzeyen bazı eski Perl mücadele muyum şu: İki farklı sistemlerde, iki farklı PERL tesisat/versiyonları, bu kod farklı davranışlar gösterir Açıkperl dize enterpolasyon
sub UNIVERSAL::has_sub_class {
my ($package,$class) = @_;
my $all = all_packages();
print "$package - $class", "\n";
print "$package::$class", "\n";
return exists $all->{"$package::$class"};
}
, "$package::$class"
yapıdır yani tek bir sistemde doğru paket adına doğru şekilde çözümlendi, ancak diğerinde değil. İki farklı sistemlerde has_sub_class
çalıştırırken
aşağıdaki farklı print
çıkışları
# print output on system 1 (perl v5.8.6):
webmars::parameter=HASH(0xee93d0) - webmars::parameter::date
webmars::parameter::date
# print output on system 2 (perl v5.18.1):
webmars::parameter=HASH(0x251c500) - webmars::parameter::date
webmars::parameter=HASH(0x251c500)::webmars::parameter::date
sen kudretini biliyor perl v5.8.6 ve perl v5.18.1 arasında herhangi bir dize enterpolasyon değişiklikler oldu mu Bu davranışa neden olur? Yoksa başka bir yere mi bakmalıyım? Gerçekten de etrafta dolaşmayı ve perl değişim notlarını okuyarak denedim, ancak ilgi çekici bir şey bulamadım.
Sınırlı bilgi birikimimle, sahip olduğum sorunu çoğaltabilecek en küçük kod parçasını almayı denedim. Ben umut takipçinizin geldi alakalı:
# system 1 (perl v5.8.6):
$ perl -e 'my %x=(),$x=bless(\%x),$y='bar';print "$x::$y\n";'
bar
# system 2 (perl v5.18.1):
$ perl -e 'my %x=(),$x=bless(\%x),$y='bar';print "$x::$y\n";'
main=HASH(0xec0ce0)::bar
çıkışları farklıdır! Herhangi bir fikir ?
perl -Mstrict -we 'my %x=(),$x=bless(\%x),$y="bar";print "$x::$y\n";'
(sürümüne, ben 'bar' için bareword uyarı olsun) kullanılarak -
'perl -Mstrict -we '% x =(), $ x = bless (\% x), $ y =' bar '; yazdırma" $ x :: $ y \ n "; –
Could bültenleri arasında araya giren 6 yıl içinde oldukça kolay bir hata olabilir :). Ama böyle bir özlü MCVE için aferin! – Sobrique