[Moscow.pm] Interesting behavior of 'delete' function

Alessandro Gorohovski an.gorohovski на gmail.com
Ср Ноя 28 11:04:41 PST 2018


Приветствую Уважаемое 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
?

С уважением,
Александр.
----------- следующая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20181128/da8e68bf/attachment.html>


Подробная информация о списке рассылки Moscow-pm