goto LABEL
goto &NAME
goto &NAME
goto LABEL
の形式は、LABEL
というラベルを探して、そこから実行を再開します。Perl
では、ほとんど必要のないラベルです。
goto
を、サブルーチンやforeach
ループなど、初期化が必要な構文の内側に飛ばす
ために使用するのはよくありません。また、最適化によってなくなってしまう構文の中も同様です。それ以外では、サブルーチンの外を含む動的スコープ内のほとんどすべての場所で使用できますが、そのような場合は、last
やdie
を使った方が良いでしょう。
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
も元のルーチンが先に呼び出されたことを知ることはできません。