先行宣言のあるなしについて質問させてください。
1) 以下のソースで3行目のサブルーチンの先行宣言を止めると mainsub の引数が参照渡しではなくなってしないます。
2) 先行宣言を止めたままで mainsub(\%Hash) の様に呼び出すと参照渡しをしてくれます。
3) 先行宣言をした状態で mainsub(\%Hash) と呼び出すとエラー (... main::mainsub must be hash...) となります。
先行宣言と、引数での'\'の使い方、参照渡しの三つ巴のからみがどうなっているのか解かりません。
なにとぞご教授願います。
---------------------------------------------------
#!/bin/perl
sub mainsub (\%);

my %Hash = ();
mainsub(%Hash);
while (($key, $value) = each(%Hash)) {
print "$key = $value\n";
}

sub mainsub (\%) {
my ($ref) = @_;
$ref->{mainsub} = "I am mainsub";
}