5部 関数リファレンス

goto

goto LABEL
goto &NAME



goto LABELの形式は、LABELというラベルを探して、そこから実行を再開します。Perlでは、ほとんど必要のないラベルです。

gotoを、サブルーチンやforeachループなど、初期化が必要な構文の内側に飛ばす
ために使用するのはよくありません。また、最適化によってなくなってしまう構文の中も同様です。それ以外では、サブルーチンの外を含む動的スコープ内のほとんどすべての場所で使用できますが、そのような場合は、lastdieを使った方が良いでしょう。

gotoの使い方

# 実用性のないスクリプトですが、goto の動作がわかると思います
$max_number = 1;
LOOP1:while(1){
	for (1 .. $max_number) {
		print "LOOP1:", $max_number, "\n";
	}goto LOOP2;
}
LOOP2:{
	print "LOOP2:", $max_number, "\n";
}
> LOOP1:1
> LOOP2:1 

goto &NAMEの形式は、現在実行中のサブルーチンをNAMEで指定したサブルーチンの呼び出しで置き換えます。これは、AUTOLOADサブルーチンが別のサブルーチンをロードして、別のサブルーチンが最初に呼ばれたようにするために使われます(ただし、現在のサブルーチンで@_を修正した場合には、置き換えられたサブルーチンに伝わります)。gotoのあとは、callerも元のルーチンが先に呼び出されたことを知ることはできません。

関連記事