goto文 - 任意のラベルにジャンプする
goto文を使うを任意のラベルにジャンプすることができます。
goto ラベル
gotoは使わないのが良い作法
Perlの現代的な記述方法で解説していますが、gotoは、使わないのがよいプログラミングの作法です。
エラー処理を行いたい場合は例外処理を使い、ループから脱出したい場合はlast文を使いましょう。Perlには代替手段が用意されているので、gotoを使うことはまずありません。
関数を再帰させる場合がgotoの唯一の使いどころ
gotoはラベルにジャンプするほかに、関数をコールスタックを増やさずに、実行することができます。Perlは末尾再帰の最適化を行なわず、深いスタックになると警告が発生しますが、「goto &関数名」という構文で回避できます。
goto &関数名
末尾再帰でgotoを使ったサンプルです。
use strict;
use warnings;
# 末尾再帰する関数
my $fact = fact(3, 2);
print "$fact\n";
sub fact {
my ($i, $n) = @_;
if ($n == 0){
return $i;
}
else {
@_ = ($i * $n, $n-1);
goto &fact;
}
}
gotoの唯一の使いどころは末尾再帰ですが、そもそも末尾再帰で書けることはfor文を使って、同じことを記述することができます。ですので、末尾再帰ではなくfor文を使って書いて、gotoをまったくソースコードで使わないようにするのが、お勧めです。
Perlゼミ

