sub Func { return 1; }
Perlの関数では引数部を記述しません。それはすべて「@_」という配列に格納されます。
sub Func { print $_[ 0 ]; # 10と出力 print $_[ 1 ]; # 20と出力 } Func( 10, 20 );
もし仮引数に名前を与えたいならば、配列をリストへ代入する方法を用いて、
sub Func { my( $a, $b ) = @_; print $a; # 10と出力 print $b; # 20と出力 }
とすると、一括して変数に代入できます。仮引数の数と型を制限したいならば、プロトタイプを用います。
関数の実引数を囲むかっこは、省略可能です。
print("Hello"); print "Hello";基本的な文法の概要 - perlintro - Perl の概要 - perldoc.jp
また、デフォルト引数を取る関数では実引数も省略可能で、
print;
と記述すると、
print $_;
の意味となります。
ただし混乱の原因となるため、実引数のかっこは省略すべきではありません。
Perlでは、すべての引数は参照渡しです。それはデータ型には無関係です。
sub Func { $_[ 0 ] *= 2; # 受け取った引数を直接変更している。 } my $x = 10; # 元の値はスカラの10 Func( $x ); print $x; # 20と出力
宣言と異なる引数で定義されたときに、エラーとなるように制限を設けられます。
sub Func( $ ); # これが宣言 ... sub Func() {} # Prototype mismatch: sub main::Func ($) vs ()
たとえば引数の数を制約できます。
sub Func( $$ ) {} Func( 1 ); # Not enough arguments for main::Func Func( 1,2 ); Func( 1,2,3 ); # Too many arguments for main::Func
引数の型にも制約を設けられます。
sub Func( \$ ) {}
Func( 1 ); # Type of arg 1 to main::Func must be scalar (not constant item)
my $a;
Func( $a );
これ以外にもさまざまな指定法があります。