sto combattendo qualche eredità perl guardando come la seguente:perl stringa di interpolazione quando si utilizza il delimitatore pacchetto
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"};
}
su due sistemi differenti, due differenti installazioni Perl/versioni, questo codice si comporta in modo diverso, vale a dire il costrutto "$package::$class"
è risolto correttamente con il nome del pacchetto corretto su un sistema, ma non sull'altro.
I seguenti diversi print
uscite può essere visto durante l'esecuzione has_sub_class
sui due sistemi diversi:
# 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
C'è stata alcuna modifica della stringa di interpolazione in mezzo perl v5.8.6 e v5.18.1 perl che conoscete potrebbe causa questo comportamento? O dovrei cercare altrove? Ho davvero provato googleing e ho letto le note di modifica perl, ma non ho trovato nulla di interessante.
Con la mia conoscenza limitata di perl, ho provato ad ottenere il più piccolo codice che possa riprodurre il problema che sto avendo. Ho trovato il seguente che spero sia rilevante:
# 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
Le uscite sono diverse! Qualche idea ?
'perl -Mstrict -we 'my% x =(), $ x = bless (\% x), $ y =' bar '; stampa" $ x :: $ y \ n ";'' –
Potrebbe abbastanza facilmente essere un bug risolto nell'intervallo di 6 anni tra le versioni :). Ma ben fatto per un MCVE così conciso! – Sobrique