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文については、以下の記事を参考にしてください。