【Perl5】制御文(条件分岐と繰り返し処理)
if文(条件分岐)
条件が1個の時
if (条件式){
条件式が真の時に実行する処理1;
条件式が真の時に実行する処理2;
}else{
条件式が偽の時に実行する処理1;
条件式が偽の時に実行する処理2;
}
条件が複数ある時
if (条件式) {
条件式1が真の時に実行する処理1;
条件式1が真の時に実行する処理2;
} elsif ($xx == 5) {
条件式2が真の時に実行する処理1;
条件式2が真の時に実行する処理2;
} else {
条件式1と2がいずれも偽の時に実行する処理1;
条件式1と2がいずれも偽の時に実行する処理2;
}
否定制御文(条件分岐)
unless (条件式){
条件式が偽の時に実行する処理1;
条件式が偽の時に実行する処理2;
}else{
条件式が真の時に実行する処理1;
条件式が真の時に実行する処理2;
}
ループ文(while)
while (条件式){
実行する処理1;
実行する処理2;
}
$i = 1;
while ($i < 10) {
print "i = $i\n";
$i++;
}
ループ文(until)
until (条件式){
実行する処理1;
実行する処理2;
}
$count = 0;
until ($count >= 2){
print "count = $count ¥n";
$count ++;
}
do文
do{...} を使うと
if(...), unless(...), while(...), until(...) の構文順序を変更することができます。
do { print "i = $i\n"; } if ($i == 5);
do { print "i = $i\n"; } unless ($i == 5);
do { print "i = $i\n"; $i++; } while ($i < 5);
do { print "i = $i\n"; $i++; } until ($i > 5);
do {...} の中身が単文の場合は、do { ; } を省略することができます。
print "i = $i\n" if ($i == 5);
print "i = $i\n" unless ($i == 5);
print "i = $i\n" while ($i++ < 5);
print "i = $i\n" until ($i++ > 5);
for文
for (初期化; 条件式; インクリメント){
実行する処理1;
実行する処理2;
}
for ($count = 0; $count < 10; $count++){
print "count = $count ¥n";
}
foreach文
foreach 変数 (リスト){
実行する処理1;
実行する処理2;
}
リストの値を格納する変数を省略することもできます。
変数を省略した場合には、デフォルト変数として「$_」と言う変数が使用されます。
foreach (リスト){
実行する処理1;
実行する処理2;
}
my @city = ("東京", "名古屋", "大阪");
foreach my $name (@city){
print "$name¥n";
}
もしくは
my @city = ("東京", "名古屋", "大阪");
foreach (@city){
print "$_¥n";
}
last文
C 言語系や Java の break 文と同じ動きをします。最も内側のループを抜けます。
my $count = 1;
while (1){
print "$count¥n";
$count++;
if ($count > 5){
last;
}
}
next文
C 言語系や Java の continue 文と同じ動きをします。
next 以降の処理を実行せずに次の条件式の評価を行います。
my $count = 0;
while ($count <= 5){
$count++;
if ($count == 2){
next;
}
print "$count¥n";
#next演算子が実行されるとこの位置に進む
}
continue文
C 言語系や Java の continue 文とは違う動きをします。
while 文で次のループにを実行する前に
continue 内の処理を実行してからループへ進みます。
continue を使うと、while 文を for 文のように使うことができます。
$i = 1;
while ($i < 10) {
print "$i\n";
} continue {
$i++;
}
は
for ($i = 1; $i < 10; $i++) {
print "$i\n";
}
と同じ結果になります。
ただし、変数 $i の最終的な値が
continue 有りでは 10 になりますが、continue 無しでは 11 になります。
redo文
redo 文が実行されるとその回のループ処理の先頭の位置まで処理を戻して
改めて繰り返し処理を行います。
my $count = 0;
while ($count <= 5){
#redo演算子が実行されるとこの位置に進む
$count++;
if ($count == 2){
redo;
}
print "$count¥n";
}
while文、until文、for文、foreach文の他に裸のブロック内に記述できます。
繰り返し処理にラベルを付ける
「last」演算子、「next」演算子、「redo」演算子と一緒にラベルを使うことで
繰り返し処理の中でより細かい制御ができるようになります。
ただし、演算子が記述されている最も内側の繰り返し処理です。
式修飾子
繰り返し処理において実行する処理が1つの場合は式修飾子を使うことができます。
利用できるのは while 修飾子、until 修飾子、そして foreach 修飾子です。
真の時に実行する処理 while 条件式;
真の時に実行する処理 until 条件式;
実行する処理 foreach 条件式;
※なお foreach 文の場合には制御変数とリストを指定する必要がありますが、
foreach 修飾子では、省略した場合に使用される「$_」が制御変数として使用されます。
my @name = ("山田", "山本", "佐藤");
print "$_¥n" foreach @name;