У Perl есть функция, называемая контекстом, который является либо абсолютно блестящим, либо невероятно раздражающим. Теперь происходит, что хеш-переменная, используемая в контексте списка , оценивает плоский список ключей и значений, например. %hash = (Index => 1, Text => "Text1")
может произвести список по
'Text', 'Text1', 'Index', 1
Каждый из этих элементов является то push
редактор на массив. Существует также скалярный контекст, который говорит нам, сколько «ведер» в хеше используется. Но как мы можем нажимать хэш на массив?
У нас нет. По определенным причинам коллекция не может иметь другую коллекцию в качестве значения. Вместо этого мы должны использовать ссылку , которую мы можем получить с помощью оператора \
(ссылка похожа на указатель, но более безопасна). Мы можем нажать, что хэш-ссылку на массив:
push @worte, \%wortObj;
Теперь, когда мы перебираем элементы в массиве, они не хэши - они являются ссылками на хэши. Поэтому перед доступом к полям в «hashref» мы должны сначала разыменовать их. Один из способов сделать это является использование оператора ->
, и мы получаем:
for my $wortObj (@worte) {
print "$wortObj->{Index} $wortObj->{Text}\n";
}
Для получения дополнительной информации о ссылках, начните с perlreftut
, то, возможно, читали perlref
, perldsc
и perlootut
.
Thank you. Я подозревал, что у меня что-то не хватает. Я даже экспериментировал с использованием фигурных скобок - считая, что этого достаточно, чтобы сказать Perl использовать хеш-ссылку вместо этого. Ну, еще раз, спасибо. – Icarus