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

