[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