Perl-users.jp

Perlのプロトタイプ (書きかけ誰かもっとかいて!)

Perlの関数は基本C/C++/Javaのように引数の型や数の宣言をする必要はありません。 ですが、特殊な状況下(たとえばDSLを書きたい時)ではある一定の指定ができます。 このような指定を「関数のプロトタイプを指定する」といいます。

このプロトタイプはJavaScriptのフレームワークであるPrototypeとは違い、関数の引数の型の宣言を行うことが出来ます。関数にプロトタイプが定義されている時は、定義された型どおりに関数を呼び出さなければエラーとなります。

sub subname ($$$) {
    my($foo, $bar, $baz) = @_;
}

といった定義の時は

subname $foo, $bar, $baz;

という形で関数を呼び出さなければなりません。

my @list = qw( foo bar baz );
subname @list;

ではエラーになります。

(&@)

sub hoge ($&) {}

のような形でプロトタイプ宣言すると

hoge 'foo', sub {};

のような形で無いと関数が使えませんが

sub hoge (&) {}
sub mymap (&@) {}

のような形でプロトタイプ宣言すると

hoge {};
mymap {} qw( a b c d );

のような形で sub を省略出来ます。


目次へ

Last modified: $Date: 2008-05-24 10:17:03 +0900 (Sat, 24 May 2008) $