То, что вы ищете, это фрагмент хеша :
# assigns the value 1 to every element of the hash
my %hash; # declare an empty hash
my @list = qw(hi bi no th xc ul 8e r); # declare the keys as a list
@hash{@list} = # for every key listed in @list,
(1) x @list; # ...assign to it the corresponding value in this list
# which is (1, 1, 1, 1, 1...) (@list in scalar context
# gives the number of elements in the list)
Оператор x
описан в perldoc perlop .
См. perldoc perldsc и perldoc perlreftut для учебных пособий по структурам данных и ссылкам (как для чтения, так и для начинающих, и для экспертов). Сами хеш-фрагменты упоминаются в perldoc perldata .
Что касается возврата хеша из функции, обычно вы должны возвращать сам хеш, а не ссылку. Вы можете использовать ссылку, если хеш равен огромный , а память или время - это проблема, но это не должно быть вашим первым беспокойством - получение кода работает.
Возвращаемые значения из функций всегда являются списками (где возвращение скаляра по сути является списком одного элемента). Хэши - это списки в Perl: вы можете взаимозаменяемо присваивать один другому (при условии, что в списке четное количество элементов и нет столкновений клавиш, которые могли бы привести к потере некоторых значений во время преобразования):
use strict; use warnings;
use Data::Dumper;
function foo
{
return qw(key1 value1 key2 value2);
}
my @list = foo();
my %hash = foo();
print Dumper(\@list);
print Dumper(\%hash);
дает:
$VAR1 = [
'key1',
'value1',
'key2',
'value2'
];
$VAR1 = {
'key2' => 'value2',
'key1' => 'value1'
};
PS. Я настоятельно рекомендую написать небольшие примеры программ, подобных приведенной выше, чтобы поиграться со структурами данных и посмотреть, что произойдет. Вы можете многому научиться, экспериментируя!