Last Update 2008/05/18
プロトタイプはサブルーチンが受け取る引数型と数の指定を行います。
呼び出しの際はサブルーチン名の前の&は使用できません。また、呼び出す前に宣言されている必要があります。
・プロトタイプ指定文字
呼び出しの際はサブルーチン名の前の&は使用できません。また、呼び出す前に宣言されている必要があります。
・プロトタイプ指定文字
@, % : それ以降の引数を全てリスト値とする
$ : 一つのスカラー値
& : 無名サブルーチン
* : 一般的にファイルハンドル
・プロトタイプを利用したサブルーチン宣言
sub 名前1 ( プロトタイプ );
名前1
サブルーチン名
・プロトタイプを利用したサブルーチン定義
sub 名前1 ( プロトタイプ ) ブロック1
名前1
サブルーチン名
ブロック1
サブルーチンの定義を行うブロック。実際のコードはここに記述
(例1)
# ここでサブルーチンを宣言
# スカラー値×1
sub test_a ($);
# スカラー値×1を引数としてサブルーチンの呼び出し
$p = test_a(1);
print "$p\n";
sub test_a ($)
{
my $a = $_[0];
return ++$a;
}
実行結果
2
(例2)
# 宣言と定義を同時に行う場合は、呼び出し前に記述
sub test_a ($)
{
my $a = $_[0];
return ++$a;
}
$p = test_a(1);
print "$p\n";
実行結果
2
(例3)
# ここでサブルーチンを宣言・定義
# スカラー値×2
sub test_b ($$)
{
my ($a, $b) = @_;
return $a + $b;
}
$p = test_b(1, 2);
print "$p\n";
実行結果
3
(例4)
# ここでサブルーチンを宣言・定義
# スカラー値×2 + 省略可能スカラー値×1
sub test_c ($$;$)
{
my ($a, $b, $c) = @_;
if ($c) {$b += $c;}
return $a + $b;
}
$p = test_c(1, 2, 3);
print "$p\n";
実行結果
6
(例5)
# ここでサブルーチンを宣言・定義
# スカラー値×2 + 配列×1
sub test_d ($$@)
{
my $a = shift;
my $b = shift;
my @c = @_;
return @c;
}
$a = 1;
$b = 2;
@c = (3, 4);
@p = test_d($a, $b, @c);
print "@p\n";
実行結果
3 4
(例6)
# ここでサブルーチンを宣言・定義
# 引数無し
sub test_e ()
{
print "test\n";
}
test_e();
実行結果
test