Perlのすべてがここにある!

Perl if文を使った条件判断~比較演算子や正規表現の活用~

カヌレ子

カヌレ子

開発エンジニア/Java/Perl/ボールド歴2年

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は優先順位が異なります。andorは、&&||よりも優先順位が低くなります。

3-2.数値比較演算子

演算子意味使用例
A == BAとBが等しいif ($a == 0)
A != BAとBが等しくないif ($a != 0)
A > BAがBより大きいif ($a > 0)
A >= BAがB以上if ($a >= 0)
A < BAがBより小さいif ($a < 0)
A<= BAがB以下if ($a <= 0)
A <==> BAとBが等しければ0
AよりBが小さければ-1
AよりBが大きければ1
if ($a <==> 0)

>=」を「=>」のように間違わないようにしましょう。

3-3.文字列比較演算子

上の表と見比べて確認してみてください。こちらは何の略かを考えると覚えやすいですね。

演算子意味使用例
A eq BAとBが等しい (equal)if ($a eq ‘A’)
A ne BAとBが等しくない (not equal)if ($a ne ‘A’)
A gt BAがBより大きい (greater than)if ($a gt ‘A’)
A ge BAがB以上 (greater than equal to)if ($a ge ‘A’)
A lt BAがBより小さい (less than)if ($a lt ‘A’)
A le BAがB以下 (less than equal to)if ($a le ‘A’)
A cmp BAと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”の綴りと、数値と文字列の比較演算子がことなるところでしょうか。

その他は他の言語とほぼ同じなので、実際にコーディングすればすぐ覚えられそうですね。

私たちは、全てのエンジニアに市場価値を高め自身の望む理想のキャリアを歩んでいただきたいと考えています。もし、今あなたが転職を検討しているのであればこちらの記事をご一読ください。理想のキャリアを実現するためのヒントが見つかるはずです。

『技術力』と『人間力』を高め市場価値の高いエンジニアを目指しませんか?

私たちは「技術力」だけでなく「人間力」の向上をもって遙かに高い水準の成果を出し、関わる全ての人々に感動を与え続ける集団でありたいと考えています。

高い水準で仕事を進めていただくためにも、弊社では次のような環境を用意しています。

  • 定年までIT業界で働くためのスキル(技術力、人間力)が身につく支援
  • 「給与が上がらない」を解消する6ヶ月に1度の明確な人事評価制度
  • 平均残業時間17時間!毎週の稼動確認を徹底しているから実現できる働きやすい環境

現在、株式会社ボールドでは「キャリア採用」のエントリーを受付中です。

まずは以下のボタンより弊社の紹介をご覧いただき、あなたの望むキャリアビジョンをエントリーフォームより詳しくお聞かせください。

コメント

公式アカウントLINE限定!ボールドの内定確率が分かる無料診断実施中
公式アカウントLINE限定!
ボールドの内定確率が分かる無料診断実施中