Возврат нескольких массивов или хэшей

Проблема

Необходимо, чтобы функция возвратила несколько массивов или хэшей, однако возвращаемые значения сглаживаются в один длинный список скалярных величин.

Решение

Возвращайте ссылки на хэши или массивы:
($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"}

См. также




2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: