サブルーチンの定義
sub を使ってサブルーチンの定義する。戻り値がある場合は return 文を使う。sub <サブルーチン名> {
<処理>
return <戻り値>;
}
サブルーチンを呼び出すときは &<サブルーチン名>(); とする。
&, () は省略可能だが、サブルーチンの定義が呼び出し位置よりも下にある場合、& もしくは () が無いとサブルーチンとして認識されない。& を付けると、自作サブルーチンと同名の組み込み関数があった場合に自作サブルーチンが優先される。
# 戻り値なし
sub sub_test1 {
print "Hello World\n";
}
# 戻り値あり
sub sub_test2 {
return "Hello World Return";
}
&sub_test1();
sub_test1; # &, () 省略
$str = sub_test2;
print $str."\n";
実行結果Hello World
Hello World
Hello World Return
私は関数を上にまとめる習慣があるので上に書いてしまいますが、Perl は下にまとめるのが一般的みたいですよ。サブルーチンの引数
呼び出し側は、サブルーチン名の後ろに () を付け、その中に引数を順に指定する。サブルーチンが受け取った引数は、特殊変数 @_ に格納される。個別に参照したい場合は $_[0], $_[1], ... とする。
sub sub_test {
print "@_"."\n";
print "$_[0]"."\n";
print "$_[1]"."\n";
}
&sub_test("Hello", "World");
実行結果Hello World
Hello
World
サブルーチン内で使用する @_ や $_[0] はリファレンスとなっているので、@_ や $_[0] を変更すると、引数として指定された変数の値も変更される。
sub sub_test {
$_[0] = "AAA";
$_[1] = "BBB";
}
@array = ("Hello", "World");
print "@array"."\n";
&sub_test(@array);
print "@array"."\n";
実行結果Hello World
AAA BBB
引数の値を変更する処理を行う場合は、一旦別の変数にコピーしてから使用すること。
sub sub_test {
my $arg1 = $_[0];
my $arg2 = $_[1];
$arg1 = "AAA";
$arg2 = "BBB";
...
}
@array = ("Hello", "World");
print "@array"."\n";
&sub_test(@array);
print "@array"."\n";
実行結果Hello World
Hello World
サブルーチンにファイルハンドルを渡す
サブルーチンにファイルハンドルを渡す場合のサンプル。引数指定時に *<ファイルハンドル名> とする。sub sub_test6 {
my $file_in = $_[0];
my $file_out = $_[1];
while ($line = <$file_in>) {
print $file_out "$line";
}
}
open (FH1, "< ./file1.txt");
open (FH2, "> ./file2.txt");
&sub_test6 (*FH1, *FH2);
0 件のコメント:
コメントを投稿