Изменяет, но в идеальном мире это ни на что не влияет. В реальном это
влияет на сериализацию, использование памяти и всякие странные XS
модули, которые пытаются отличать строки от чисел по флажкам, а не как
перл ф-цией looks_like_number ;-)
Perl при трансляции числовых скаляров в строки, кеширует строковое
представление (чтоб не вычислять заново).
В вашем примере такая трансляция потребовалась, чтоб составить ключ нового хеша.
А вот еще пример:
perl -MDevel::Peek -E 'my @a=("int",222); Dump \@a; reverse @a; Dump \@a;'Я лично очень редко был вынужден задумываться о таком поведении. Оно почти никогда не мешает. 1 октября 2012 г., 19:20 пользователь Denis Evdokimov <[email protected]> написал: > А знаете ли вы, что reverse изменяет свой агрумент? > В этом легко убедиться с помощью JSON или Devel::Peek : > > perl -MJSON -e'my %a=(int => 222); print to_json \%a; my %b=reverse %a; > print to_json \%a;' > {"int":222}{"int":"222"} > > perl -MDevel::Peek -e'my %a=(int => 222); Dump $a{int}; my %b=reverse %a; > Dump $a{int};' > SV = IV(0x1036d40) at 0x1036d48 > REFCNT = 1 > FLAGS = (IOK,pIOK) > IV = 222 > SV = PVIV(0x1051220) at 0x1036d48 > REFCNT = 1 > FLAGS = (IOK,POK,pIOK,pPOK) > IV = 222 > PV = 0x1056220 "222"\0 > CUR = 3 > LEN = 8 > > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > -- Vladimir Timofeev <[email protected]> -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
