Perlのif文とは?if文を使った条件判断~比較演算子や正規表現の活用~
Perlにも他の言語と同様if文があります。しかしPerlならではの使い方や、有名な言語と少し異なる点もあるので注意が必要です。覚えてしまえば他の言語に比べとても使いやすく感じると思います!実際にコードを確認しながら理解を深めていきましょう。
目次
1.if文の基本的な使い方
「もし〇〇である場合、△△の処理をする」といったようにある条件の時だけ特定の処理を行いたいときに使用します。
書き方は以下の通りです。
if ( 条件式 ) {
条件式を満たす(真)の時の処理
}
my $a = 10; my $b = 2; if ($a % $b == 0) { print "$aは$bで割り切れます。\n"; } print "おわり"; 実行結果: 10は2で割り切れます。 おわり
$b=2を$b=3に変更すると、「おわり」しか表示されません。実際にコーディングして確かめてみてください。
Perlはif修飾子を使うことで、1行で書くこともできます。
条件式を満たす(真)の時の処理 if (条件式);
for (my $num = 0; $num < 10; $num++) { print "$num \n" if ($num == 5); } 実行結果: 5
ファイルを編集する前に、それがどのような状態にあるのか検査したいときは、オプションを使います。
if (-e "sample.txt") { # sample.txtが存在すれば真 print "sample.txt存在します。\n"; } else { print "sample.txtは存在しません。\n"; } 実行結果: sample.txtは存在しません。
オプションを使うことで、存在しないファイルを開こうとしてエラーになってしまった…ということを避けられますね。オプションはたくさんありますので、よく使用するもののみいくつか紹介します。
上記コードの”-e”の部分を書き換えて、色々試してみましょう。
-r | 読み込み可能であれば真 |
-w | 書き込み可能であれば真 |
-e | 存在すれば真 |
-z | サイズが0であれば真 |
-f | 通常ファイルであれば真 |
-T | テキストファイルであれば真 |
2.複数の条件分岐(else, elsif)
もしAの場合はAAの処理、Bの場合はBBの処理、Cの場合は・・・というように複数の条件で処理を分けたいときは次のように書きます。
my @list = ('B', 'C', 'A', 'D'); my $num = 0; foreach (@list) { $num++; if ($_ eq 'A') { print "$num番目にA\n"; } elsif ($_ eq 'B') { # elsifはいくつ繋げてもOK print "$num番目にB\n"; } else { print "AでもBでもない($_)\n"; } } 実行結果: 1番目にB AでもBでもない(C) 3番目にA AでもBでもない(D)
JavaやC言語の場合は「else if」ですが、Perlは「elsif」なので気を付けてくださいね。
条件式にある”eq”は、数字ではなく文字を比較する場合の演算子です。3-2をご覧ください。
3.if文で使用する演算子
if文ではよく比較に「==」を使っていますね。
これはPerlでは数値を比較するときに使用する演算子です。比較対象が数値なのか、文字列なのかで使用する演算子が変わります。
3-1.論理演算子
複数の条件式をif文の中で組み合わせたい場合に使います。
演算子 | 意味 | 使用例 |
&& / and | 論理積(かつ) | if ($a > 0 && $b < 0) |
|| / or | 論理和(または) | if ($a > 0 || $b < 0) |
xor | 排他的論理和 | if ($a > 0 xor $b < 0) |
! / not | 否定 | if (!$a==0) |
&& と andは優先順位が異なります。andやorは、&&や||よりも優先順位が低くなります。
3-2.数値比較演算子
演算子 | 意味 | 使用例 |
A == B | AとBが等しい | if ($a == 0) |
A != B | AとBが等しくない | if ($a != 0) |
A > B | AがBより大きい | if ($a > 0) |
A >= B | AがB以上 | if ($a >= 0) |
A < B | AがBより小さい | if ($a < 0) |
A<= B | AがB以下 | if ($a <= 0) |
A <==> B | AとBが等しければ0 AよりBが小さければ-1 AよりBが大きければ1 | if ($a <==> 0) |
「>=」を「=>」のように間違わないようにしましょう。
3-3.文字列比較演算子
上の表と見比べて確認してみてください。こちらは何の略かを考えると覚えやすいですね。
演算子 | 意味 | 使用例 |
A eq B | AとBが等しい (equal) | if ($a eq ‘A’) |
A ne B | AとBが等しくない (not equal) | if ($a ne ‘A’) |
A gt B | AがBより大きい (greater than) | if ($a gt ‘A’) |
A ge B | AがB以上 (greater than equal to) | if ($a ge ‘A’) |
A lt B | AがBより小さい (less than) | if ($a lt ‘A’) |
A le B | AがB以下 (less than equal to) | if ($a le ‘A’) |
A cmp B | AとBが等しければ0 AよりBが小さければ-1 AよりBが大きければ1 (compare) | if ($a cmp ‘A’) |
‘A’の部分は直接文字列をいれなくても、文字を代入した変数でも構いません。
4.正規表現を使ったif文
完全一致ではなく、文字列の中にパターンが含まれているかを調べたい場合には正規表現を使います。
my $str = 'red blue yellow green white'; if ($str =~ /wh/) { print "whが含まれています。\n"; } else { print "whは含まれていません。\n"; } 実行結果: whが含まれています。
If文の条件式にある「=~」は、パターンが含まれている場合に真となります。含まれていない場合としたい場合は、「!~」とします。正規表現については下記記事をご参照ください。
関連記事5.まとめ
Perlのif文で気を付けるところは、”elsif”の綴りと、数値と文字列の比較演算子が異なるところでしょうか。
その他は他の言語とほぼ同じなので、実際にコーディングすればすぐ覚えられそうですね。
コメント