Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. 構文
  3. here

last文 - 繰り返しから抜ける

last文を使うと次の繰り返しから抜けることができます。これは、C言語やJavaのbreak文に該当します。

last

last文はwhile文やfor文などの繰り返し文の中で使うことができます。

while (1) {
  if (条件) {
    last;
  }
}

for (my $i = 0; $i < 10; $i++) {
  if (条件) {
    last;
  }
}

foreach my $animal (@animals) {
  if (条件) {  
    last;
  }
}

特定の条件の時だけ、ループを脱出したい場合にlast文を利用することができます。

サンプルプログラム

last文を使ったサンプルプログラムです。

特定の文字にマッチしたときループを抜ける

ループ処理の途中で、ある条件の場合に、ループを抜けたい場合にlast文を利用できます。文字の配列を準備して、特定の文字の場合にループを抜けるサンプルです。

use strict;
use warnings;

my @chars = qw(z z a b c d e f);

for my $char (@chars){
  last if $char eq 'c';
  print "$char\n";
}

実行結果です。「c」のときにループを抜けるので、出力結果は「c」の前にある文字だけになります。

z
z
a
b

「qw(z z a b c d e f)」は文字列リスト演算子です。

if文、for文、while文については、以下で詳しく解説していますので、参考にしてください。

多重ループから抜ける方法

lastを使うとループから脱出できますが、脱出できるのは直近のループブロックだけです。多重ループから抜け出すには少し工夫が必要です。フラグと条件分岐をうまく使うことで多重ループを脱出できます。

無限ループを、フラグとふたつのlastを使って脱出するプログラムです。

my $num = 0;

# 多重ループから脱出する
while (1) {
  # フラグをひとつ作成する
  my $finish;
  while (1) {
    if ($num == 10) {
      $finish = 1;
      last;
    }
    $num++;
  }
  if ($finish) {
    last;
  }
}

ラベルを外側のループの上に書いて、「last ラベル」として多重ループを抜ける方法もありますが、個人的には、お勧めしません。上記のようにうまくフラグを作って、多重ループを脱出したほうが、ソースコードの見通しがよくなります。

関連情報

next文を使うとループの先頭にジャンプできる

last文と似たものにnext文があります。next文を使うと、次のループの先頭に移動することができます。

next

next文については、以下の記事を参考にしてください。

Giblog