[Moscow.pm] reverse изменяет аргумент
Ruslan Zakirov
ruz на bestpractical.com
Пн Окт 1 10:06:18 PDT 2012
2012/10/1 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;
Это не reverse, а aassign. Reverse кладет на стек альясы, а не копии.
Сделано для лупов. А aassign полученые значения использует для
создания хеша и то что раньше было значением становится ключом.
Вот еще один пример:
perl -MJSON -E 'my %h = (1..4); $_."" for values %h; say to_json \%h'
В доке к JSON есть описание того как происходит конвертация. Мне
казалось, что где-то я видел опцию, которая переворачивает ситуацию,
но я точно не помню.
> 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
>
--
Best regards, Ruslan.
Подробная информация о списке рассылки Moscow-pm