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

Alessandro Gorohovski an.gorohovski на gmail.com
Ср Ноя 28 22:46:44 PST 2018


Иван, Здравствуйте.

чт, 29 нояб. 2018 г. в 00:08, Иван Бессарабов via Moscow-pm <
moscow-pm на pm.org>:

>
> > причем здесь autovivification
>
> А куда в результате появился пустой hashref?
>
> Вот и я об этом, куд-куда и зачем он взялся то?
когда функция delete, наоборот, должна, как минимум ничего не cделать.


> ```
> '21 24' => {}
> ```
>
 вообще, если быть точным, там появился
 '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
>>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
----------- следующая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20181129/1840c811/attachment.html>


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