サブルーチンに複数のリストを渡す

back
通常リスト(や配列やハッシュ)をサブルーチンに渡すと、@_ で一括されてしまう。


--------------------------------
@array = (1,2,3);
%hash = ("key1"=>"val1", "key2"=>"val2");

&function(@array, %hash);

sub function {
  my (@array, %hash) = @_;    # @array に全部代入される

  foreach (@array) {
    print "$_\n";
  }
  print "---\n";
  foreach (keys %hash) {
    print "$_: $hash{$_}\n";
  }
  print "--\nend\n";
}
--------------------------------
[結果]
1
2
3
key2
val2
key1
val1
---
--
end


ここで、リファレンスを使う

--------------------------------
@array = (1,2,3);
%hash = ("key1"=>"val1", "key2"=>"val2");

&function(\@array, \%hash);

sub function {
  my $array = shift;
  my $hash = shift;

  foreach (@$array) {            # デリファレンス
    print "$_\n";
  }
  print "---\n";
  foreach (keys %$hash) {        # デリファレンス
    print "$_: $hash->{$_}\n";
  }
  print "--\nend\n";
}
----------------
[結果]
1
2
3
---
key2: val2
key1: val1
--
end

back