■ユーザ関数の定義

・ユーザ関数(サブルーチン)の構文は以下の通り

sub subname {
  statemenet1;
  statemenet2;
  statemenet3;
}

・サブルーチンの呼び出す際に使用する名前は&subnameもしくは単にsubname
・サブルーチンの定義はプログラムのどこにおいてもかまわない。
・同じ名前で定義された場合、下にあるほうが有効になる。
・戻り値はreturnを記述した行の値を返します。ただしreturnを記述しなかった場合、サブルーチン内で最後に実行された行の値を返します。
・引く数をサブルーチンないで呼ぶ出す場合@_の配列にアクセスします。
  subname(1, 2, 3, 4)
  サブルーチン内 $_[0] = 1, $_[1] = 2, $_[3] = 3, $_[4] = 4, $_[5] = undef
・サブルーチン内のプライベート変数
  演算子myは変数名のリストを受け取るとローカル版のリストを作成する。
・サブルーチン内のセミプライベート変数
 演算子localを使った変数は、その変数が宣言されるブロックの中から呼び出される関数から見える
 

sub add {
	my $sum = 0;
	for $_ (@_) {
		$sum += $_
	}
	return $sum;
}

# 任意の数の引数を渡す
print add(1, 2, 3, 4) . "\n";
print add(1, 2) . "\n";

# 配列を渡す
@list = (1, 2, 3, 4, 5);
print add(@list);

実行結果

10
3
15

myとlocalの違い

$value = "Original";

# localの場合
tellme();
spoof();
tellme();

sub spoof {
	local ($value) = "Temporary";
	tellme();
}

sub tellme {
	print "Current value is $value\n";
}

# myの場合
tellyou();
spoof2();
tellyou;

sub spoof2 {
	my ($value) = "Temporary";
	tellme();
}

sub tellyou {
	print "Current value is $value\n";
}

実行結果

Current value is Original
Current value is Temporary
Current value is Original
Current value is Original
Current value is Original