if, unless
while
for
foreach
label continue
do
goto
next
last
redo
ラベル
スクリプトの終了 - exit
ifステートメントの意味はC言語のifとほぼ同じです。
if文の代わりに、unlessを使うこともできます。unlessはifと条件式の論理が逆に扱われます。 実行部(ブロック)はつねに{}で囲む必要があります。
if ( expression ) block
if ( expression ) block else block
if ( expression ) block elsif block ... else block
expressionには条件(式)を指定します。blockは実行部です({}で囲む必要があります)。
while文の意味はC言語のwhile文とほぼ同じです。
[ label ] while ( expression ) block
[ label ] while ( expression ) block continue block
continueの後のブロックは繰り返しのたびに実行されるブロックです。continueブロックはnextによって ループの処理を途中からスキップした場合も実行されます。
for文の意味はC言語のfor文とほぼ同じでです。
[ label ] for ( expression; expression; expression ) block
foreach文では、括弧の中に指定したリスト(配列)listの要素が順に変数varに代入された後blockが実行されます。
リストの要素が無くなったらループを終了します。
[ label ] foreach var ( list ) block
foreach $file ( <*> )
{
# カレントディレクトリ内のすべてのファイルに対して操作を行う
}
foreach の後の変数の指定を省略すると$_が使用されます。
[ label ] block continue block
if、unless、while、until等のステートメントは、最初に条件の評価が行われますが、doステートメントと併用すると、条件の評価を繰り返し構造の最後におくことができます。
do { print "xx = $xx\n"; } if ($xx == 5);
do { print "xx = $xx\n"; } unless ($xx == 5);
do { print "xx = $xx\n"; $xx++; } while ($xx < 5);
do { print "xx = $xx\n"; $xx++; } until ($xx > 5);
Perlにはgotoステートメントはありませんが、関数としてgotoが用意されており、任意のラベルに制御を移すことができます。
PerlではキーワードcontinueはC/C++等の他の一般的な言語のcontinueとは異なった意味に用いられます。その代わりに、C/C++のcontinueに対応するnextが用意されています。
lastステートメントは、C/C++のbreak文に相当し、ループを終了します。
redoステートメントはnextと同様にループの先頭に戻りますが、このときループ条件を評価せずに、continueブロックも評価しません。つまりブロック内の先頭行にジャンプするということです。
ラベルはC言語と同じように名前の後にコロンをつけます。
name:
スクリプトを終了するにはeit関数を使います。
exit ( status_code );
status_codeはステータスコードとして、呼び出し側に返ります。