Perlゼミ

  1. Perl
  2. 構文・文法
  3. here

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の書籍
  • 業務に役立つPerl

    ログ解析など日本語を含むテキスト処理の実践!
    この私、Perlゼミの作者が執筆しています。
    ご購入、口コミ歓迎。
  • Perlの書籍 »
自己紹介
木本裕紀

「今日も元気だ、Perlで元気。
ゆとりあるITエンジニアライフのために
Perl情報を前向きに発信中!」

Twitter
フォロー、いいね、リツート、コメント歓迎

Youtube

チャンネル登録、いいね、コメント歓迎

kimoto.yuki@gmail.com
応援メッセージ、質問、間違い報告歓迎

木本システム株式会社
ご紹介キャンペーン実施中です。契約金額の10%をご紹介料としてお支払い。

(例)30万円のシステム開発委託契約が、1年続いたら、36万円がもらえる!!!