Это меня и раньше раздражало.
my %h = ();
Обратите внимание на использование ()
вместо {}
.
Объяснение: Значение {}
равно ссылка на хеш, а не на сам хеш.В Perl ссылка является своего рода скалярным значением, а присвоение %h
имеет специальную обработку для присвоения одного скалярного значения.Он структурирует скаляр (давая вам строку HASH(0x229e8)
в вашем случае) и связывает этот ключ со значением undef
.
При использовании ()
присвоение из списка хешу создает ключ / значениепары из пар в списке, и поскольку ()
пусто, хеш %h
становится пустым.