サブルーチンから複数のリストを返す

back
複数のリストを返すリストで、普通に複数の配列やハッシュで受けても、最初の
一つの配列に全て格納されてしまう。

--------------------------------
(@array, %hash) = &func;

foreach (@array) {
  print $_, "\n";
}
print "----\n";

foreach (keys %hash) {
  print $_, ": ", $hash{$_}, "\n";
}
print "--\n";
print "end\n";

sub func {
  my @array = (1,2,3);
  my %hash = ("key1" => "val1", "key2" => "val2", "key3" => "val3");

  return (@array, %hash);
}
--------------------------------
[結果]
1
2
3
key2
val2
key1
val1
key3
val3
----
--
end


ここで、やっぱりリファレンスを使う

--------------------------------
($array, $hash) = &func;             # スカラーで受ける

foreach (@$array) {                  # デリファレンス
  print $_, "\n";
}
print "----\n";

foreach (keys %$hash) {              # デリファレンス
  print $_, ": ", $hash->{$_},"\n";  # デリファレンス
}
print "--\n";
print "end\n";

sub func {
  my @array = (1,2,3);
  my %hash = ("key1" => "val1", "key2" => "val2", "key3" => "val3");

  return (\@array, \%hash);          # リファレンスを返す
}
----------------
[結果]
1
2
3
----
key2: val2
key1: val1
key3: val3
--
end

back