[Moscow.pm] Interesting behavior of 'delete' function
Alessandro Gorohovski
an.gorohovski на gmail.com
Ср Ноя 28 12:53:45 PST 2018
Hello Eugen,
ср, 28 нояб. 2018 г. в 22:30, Eugen Konkov <kes-kes на yandex.ru>:
> Hello Alessandro,
>
> 1. Это поведение объясняется autovivification.
>
Не согласен. Pardon me, причем здесь autovivification
> 2. А где вы такой синтаксис увидели?
> delete $a{11}{21,24}{31}
>
Sorry, вообще, это классика.
See Larry Wall, Tom Christiansen, & Jon Orwant, Programming Perl, 3rd
Russian ed. -p.759,
please.
> Wednesday, November 28, 2018, 9:04:41 PM, you wrote:
>
>
> Приветствую Уважаемое Perl-сообщество,
>
> Возможно это покажется тривиальным/хорошо известным поведением
> функции delete применительно к хешам, но оставлю на всякий случай.
>
> Итак имеется хеш %a:
> print Dumper \%a;
> $VAR1 = {
> '11' => {
> '24' => {
> '31' => 41
> },
> '23' => {
> '33' => 43
> },
> '22' => {
> '32' => 42
> },
> '21' => {
> '31' => 41
> }
> }
> };
> из которого надо удалить, к примеру несколько внутренних элементов,
> например: $a{11}{21}{31} и $a{11}{24}{31}
> Выполняем :
> delete $a{11}{21,24}{31}
>
> но удаления не происходит :(
> а добавляется новый внутренний загадасный элемент:
>
> print Dumper \%a;
> $VAR1 = {
> '11' => {
> '23' => {
> '33' => 43
> },
> '22' => {
> '32' => 42
> },
> '21' => {
> '31' => 41
> },
> '24' => {
> '31' => 41
> },
> '21 24' => {}
> }
> };
>
> Или например так:
> delete $a{11}{keys %{$a{11} } }{31}
>
> Опять добавляется новый элемент.
>
> print Dumper \%a;
> $VAR1 = {
> '11' => {
> '5' => {},
> '21' => {
> '31' => 41
> },
> '23' => {
> '33' => 43
> },
> '22' => {
> '32' => 42
> },
> '21 24' => {},
> '24' => {
> '31' => 41
> }
> }
> };
>
> Как вы думаете в чём причина такого поведения delete
> ?
>
> С уважением,
> Александр.
>
>
>
>
>
> *-- Best regards, Eugen Konkov*
>
----------- следующая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20181128/6d623086/attachment-0001.html>
Подробная информация о списке рассылки Moscow-pm