Возврат нескольких массивов или хэшей
Проблема
Необходимо, чтобы функция возвратила несколько массивов или хэшей, однако возвращаемые
значения сглаживаются в один длинный список скалярных величин.
Решение
Возвращайте ссылки на хэши или массивы:
($array_ref, $hash_ref) = somefunc();
sub somefunc {
my @array;
my %hash;
# ...
return ( \@array, \%hash );
}
Комментарий
Как говорилось выше, все аргументы функции сливаются в общий список скалярных величин.
То же самое происходит и с возвращаемыми значениями. Функция, возвращающая отдельные массивы
или хэши, должна возвращать их по ссылке, и вызывающая сторона должна быть готова к получению
ссылок. Например, возвращение трех отдельных хэшей может выглядеть так:
sub fn {
....
return (\%a, \%b, \%с); # или
return \(%a, %b, %с); # то же самое
}
Вызывающая сторона должна помнить о том, что функция возвращает список ссылок на хэши.
Она не может просто присвоить его списку из трех хэшей.
(%h0, %h1, %h2) = fn(); # НЕВЕРНО!
@array_of_hashes = fn(); # например: $array_of_hashes[2]->{"keystring"}
($r0, $r1, $r2) = fn(); # например: $r2->{"keystring"}
См. также
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|