Ответ 1
Вы близко:
my @values = @$hashref{@testKeys}; ## (1)
или
my @values = @{$hashref}{@testKeys}; ## (2)
Дополнительные примеры см. в "Slices" в документации по perllol.
"Использование ссылок" в документации perlref содержит общие правила.
1. В любом месте, где вы поместите идентификатор (или цепочку идентификаторов) как часть имени переменной или подпрограммы, вы можете заменить идентификатор простой скалярной переменной, содержащей ссылку правильного типа.
Это объясняет, почему (1) работает: вы заменили идентификатор testHash
на простой скаляр $hashRef
.
2. В любом месте, где вы поместите идентификатор (или цепочку идентификаторов) как часть имени переменной или подпрограммы, вы можете заменить идентификатор BLOCK, возвращающим ссылку правильного типа.
Фрагмент (2) выше почти такой же, но имеет немного более громоздкий синтаксис. Вместо идентификатора testHash
вы пишете блок, возвращающий ссылку на хеш, т.е. {$hashRef}
.
Здесь фигурные скобки заключают в себе добросовестный блок, поэтому вы можете вычислять и возвращать ссылку, как в
push @{ $cond ? \@a1 : \@a2 }, "some value";