制御構文(5) next, last, redo

nextとlastは、C言語でいうcontinueとbreakにあたります。Perlの構文はC言語に似ているので間違えそうです。(-_-;
nextは、ループのブロックの途中からループの先頭に戻る事ができます。この際、whileやuntilの継続条件式、forの条件式・再初期化式は評価されます。条件式の評価結果が偽ならそこでループは中断されます。
それに対してredoは、ループのブロックの途中からループの先頭に戻るのは同じですが、条件式や再初期化式は評価されません。例え条件式の評価が偽でも中断しません。
lastは、ループのブロックの途中でループを中断する事ができます。ループが多重になっていても、抜けるループは1つだけです*1

# looptest2.pl
my @week = ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");
 
foreach $day (@week) {
	if ($day eq "Wed") { next }
	print "$day\n";
	if ($day eq "Sat") { last }
}

一見、配列 @week の中身が全部表示されるように見えます。
eq は演算子の一種で、文字列同士を比較して同じ文字列なら真を、違うなら偽を返す演算子です。数字でいう == ですね。ちなみに、数字でいう != にあたるのは ne になります。それぞれ equal と not equal の略だと思われます。
実行結果です。

Mon
Tue
Thu
Fri
Sat

$day が "Wed" の時は next で表示せずに次の要素にいきます。それ以外なら $day を表示します。その後、$day が "Sat" ならそこでループを中断します。
なので、"Wed" と "Sun" は表示されていませんね。

*1:ラベルを使うと一気に多重ループを抜けられるみたいです