walczę trochę starszego Perl wygląda jak następuje:Perl interpolacja ciąg przy użyciu separatora pakiet
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"};
}
na dwóch różnych systemów, dwa różne instalacje Perl/wersji, kod ten zachowuje się inaczej, tzn "$package::$class"
konstruktu poprawnie rozwiązany pod prawidłową nazwą pakietu w jednym systemie, ale nie po drugiej.
następujących różnych print
wyjść można zaobserwować podczas pracy has_sub_class
na dwóch różnych systemach:
# 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
Czy nastąpiły jakieś zmiany w ciąg interpolacji między perl v5.8.6 i Perl v5.18.1 które znają potęgę spowodować to zachowanie? A może powinienem szukać gdzieś indziej? Naprawdę próbowałem googlować i czytać notatki zmian perla, ale nie mogłem znaleźć niczego interesującego.
Z moją ograniczoną znajomością perla, próbowałem uzyskać najmniejszy fragment kodu, który mógłby odtworzyć problem, który mam. Wymyśliłem następujące informacje, które mam nadzieję mają znaczenie:
# 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
Wyniki są różne! Jakieś pomysły ?
'perl -Mstrict -we 'my% x =(), $ x = błogosław (\% x), $ y =' bar ', wydrukuj" $ x :: $ y \ n ";'' –
Może dość łatwo można naprawić błąd w przeciągu 6 lat między wydaniami :). Ale dobrze zrobione za tak zwięzłe MCVE! – Sobrique