2.10.3. 基本構文#
2.10.3.1. 条件構文#
条件構文は、条件が真か偽かによって処理内容を切り替えるために使用します。基本的な if 文では、条件が真の場合のみブロック内の処理が実行されます。
my $x = 10;
if ($x > 5) {
print "x is greater than 5\n";
}
条件に応じて異なる処理を行いたい場合は else を追加します。条件が偽のときに else ブロックが実行されます。
my $x = 3;
if ($x > 5) {
print "x is greater than 5\n";
} else {
print "x is 5 or less\n";
}
複数の条件を順番に評価する場合は elsif を用います。上から順に評価され、最初に真になったブロックのみが実行されます。
my $x = 5;
if ($x > 5) {
print "x is greater than 5\n";
} elsif ($x == 5) {
print "x is equal to 5\n";
} else {
print "x is less than 5\n";
}
2.10.3.2. 繰り返し構文#
同じ処理を繰り返し実行するには、for、foreach、while などの構文を使用します。
2.10.3.2.1. for#
for 文は、あらかじめ回数が決まっている場合に便利です。初期化、継続条件、更新処理を 1 行で指定できます。
for (my $i = 0; $i < 5; $i++) {
print $i, "\n";
}
配列の要素を順番に処理する場合も for を使えます。
my @arr = ("A", "C", "G", "T");
for my $base (@arr) {
print $base, "\n";
}
2.10.3.2.2. foreach#
配列の各要素を順に処理する場合、foreach 文も使えます。
my @arr = ("A", "C", "G", "T");
foreach my $base (@arr) {
print $base, "\n";
}
2.10.3.2.3. while#
while 文は、条件が真である間、処理を繰り返す構文です。繰り返し回数が事前に決まっていない場合に適しており、for 文と同様に使えますが、条件の設定と管理が必要です。例えば、次の例では $i が配列の要素数未満である間、処理を繰り返します。
my @arr = ("A", "C", "G", "T");
my $i = 0;
while ($i < @arr) {
print $arr[$i], "\n";
$i++;
}
ファイルを処理する場合、プログラムは通常ファイルを 1 行ずつ読み込みます。このとき、ファイルの行数は事前に分からないため、「ファイルの末端に達するまで」という条件で処理を繰り返す必要があります。そのような場合にも、while 文がよく用いられます。
while (my $line = <STDIN>) {
chomp $line;
print $line, "\n";
}