борется немного устаревшая Perl выглядит как следующее:Perl строка интерполяции при использовании пакета разделителя
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"};
}
На два разных системах, два различных PERL установок/версию, этот код ведет себя по-разному, т.е. "$package::$class"
конструкта правильно разрешено правильное имя пакета в одной системе, но не на другом.
следующих различных print
выходов можно увидеть при запуске has_sub_class
на два различных системах:
# 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
Были ли какое-либо строка интерполяции изменения между PERL v5.8.6 и PERL v5.18.1, что вы знаете, мощь вызвать это поведение? Или я должен смотреть в другое место? Я действительно пробовал google-ing и читал записи изменений perl, но не мог найти ничего интересного.
С моим ограниченным знанием perl, я попытался получить наименьший фрагмент кода, который мог бы воспроизвести проблему, которую я испытываю. Я пришел к следующему:
# 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
Выходы разные! Есть идеи ?
'perl -Mstrict -we 'my% x =(), $ x = bless (\% x), $ y =' bar '; print" $ x :: $ y \ n ";'' –
Не удалось довольно легко быть ошибкой, зафиксированной в промежуточные 6 лет между релизами :). Но хорошо сделано для такого краткого MCVE! – Sobrique