このブログを検索

2011/04/30

Perlで引数を取得するとき

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