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

Иван Бессарабов ivan на bessarabov.ru
Ср Ноя 28 13:07:48 PST 2018


> причем здесь autovivification

А куда в результате появился пустой hashref?

```
'21 24' => {}
```

> Programming Perl, 3rd  Russian ed. -p.759,

Разве `delete @{ $dungeon[$x][$y] }{ "OCCUPIED", "DAMP", "LIGHTED" };`
это то же самое что и `delete $a{11}{21,24}{31}` ?





On Wed, Nov 28, 2018 at 11:54 PM Alessandro Gorohovski via Moscow-pm <
moscow-pm на pm.org> wrote:

> 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*
>>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
----------- следующая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20181129/61486e30/attachment.html>


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