2014-01-23 3 views
1

Почему разыменование хеш-ссылки в хеш & присвоение ее скаляру дает нерелевантное значение (по крайней мере, для меня)?Perl: Развертывание хэш-ссылки в скаляр?

Код:

my $hash = { 
     1 => 9, 
     2 => 10, 
     3 => 11, 
     4 => 12, 
     5 => 13, 
     6 => 14, 
     7 => 15, 
     8 => 16, 
     }; 

my $dereferenced = %$hash; 

print $dereferenced; 

Perl версия: 5.12.4

ОС: Windows 7

Значение Печатаемая

7/16 

ли что-то делать с Perl внутренности?

+1

Что бы вы ожидали, что '$ разыменовали' содержать? – Borodin

+0

my $ dereferenced =% $ hash; <- здесь вы хотите сделать% разыменованных с помощью% sigil или \% $ hash, передавая таким образом ссылку – Davs

+0

Спасибо! Извините, что я отправил дублированный вопрос! Теперь я понял, что общий размер ковша = 16. Число ковшей, содержащих один или несколько элементов = 7. Следовательно, 7/16. Этот хэш имел больше коллизий itseems! – InnovWelt

ответ

1

Скалары не могут содержать хеши или массивы, только ссылки на них.

Но даже если бы они могли, когда вы используете хэш на правой стороне скалярного присвоения, то в скалярном контексте и хеш в скалярном контексте производит ложным, если хэш пуст, или строка, описывающая использование ведра в хеше, если нет (например, «7/32»).

+0

Несмотря на то, что я уже давно работал над perl, я не знал, как работает концепция хэширования в perl. Хорошо знать новый термин под названием «Ведро». благодаря! – InnovWelt

+0

@InnovWelt термин * Bucket * не очень полезен для того, чтобы стать лучшим программистом на Perl, тогда как знание смысла *** скалярного контекста *** есть. – Wolf

Смежные вопросы