[Moscow.pm] reverse изменяет аргумент
Vladimir Timofeev
vovkasm на gmail.com
Пн Окт 1 10:07:06 PDT 2012
Изменяет, но в идеальном мире это ни на что не влияет. В реальном это
влияет на сериализацию, использование памяти и всякие странные 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
<evdokimov.denis на gmail.com> написал:
> А знаете ли вы, что 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
> moscow-pm на pm.org | http://moscow.pm.org
>
--
Vladimir Timofeev <vovkasm на gmail.com>
Подробная информация о списке рассылки Moscow-pm