5部 関数リファレンス

goto

2011年9月20日
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も元のルーチンが先に呼び出されたことを知ることはできません。

Comment

コメントを残す

メールアドレスが公開されることはありません。

リズムファクトリーはホームページの制作会社です。
ホームページ制作に関するご要望・ご相談はこちらからどうぞ。