sub my_subroutine{
my $val1 = @_;
...
}
とやってしまい、$val1が "1" となってしまった。
sub my_subroutine{
my ($val1) = @_;
...
}
このようにしなければならない。@_ は、配列だからである。配列を、カッコで括った複数の変数に代入すると、その変数の数だけの配列がコピーされる。上記の例は、配列の最初の要素を、$val1にコピーしているのである。基本的なことだけど。最初の $val1 = @_ とやると、配列 @_ の要素数が入るのかな。だから1になった。