Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. 演算子
  3. here

Perlの論理演算子

Perlの論理演算子には次のものがあります。

*演算子 *意味
|| 論理和
&& 論理積
! 否定
or 論理和(&&より優先順位が低い)
and 論理積&&より優先順位が低い)
not 否定(!より優先優位が低い)

&& 論理積(A かつ B)

「AかつB」という論理積を表すには&&を使用します。

# 1より大きい、かつ4より小さい
if ($num > 1 && $num < 4) {
  ...
}

|| 論理和(A または B)

「AまたはB」という論理積を表すには||を使用します。少なくともどちらかひとつの値が真の場合に、真になります。

# 'dog'または'cat'
if ($pet eq 'dog' || $pet eq 'cat') {
  print "\$pet は、'dog' あるいは、'cat' のどちらかである。\n\n";
}

! 否定(Aでない)

「Aではない」という否定を表すには!を使用します。

# $numは真ではない
if (!$num) {
  ...
}

and 論理積(A かつ B) 優先順位低い

「AかつB」という論理積を表すのにandを使用することもできます。優先順位は「&&」より小さくなっています。論理積には「&&」を使うのがお勧めです。「and」は以下で解説する条件分岐に利用することができます。

# 1より大きい、かつ4より小さい
if ($num > 1 and $num < 4) {
  ...
}

or 論理和(A または B) 優先順位低い

「AまたはB」という論理積を表すのにorを使用することもできます。優先順位は「||」より小さくなっています。論理和には「||」を使うのがお勧めです。「or」は以下で解説する条件分岐に利用することができます。

# 'dog'または'cat'
if ($pet eq 'dog' or $pet eq 'cat') {
  print "\$pet は、'dog' あるいは、'cat' のどちらかである。\n\n";
}

not 否定(Aでない) 優先順位低い

「Aではない」という否定を表すのにnotを使用することもできます。優先順位は「!」よりも小さくなっています。否定には「not」ではなく「!」を使うのがお勧めです。

# $numは真ではない
if (not $num) {
  ...
}

論理演算子の一般的な使われ方

if文、unless文、while文、for文の中で使う場合は、「&&」「||」「!」を使うのがPerlの慣習になっています。and、notは使われることが少ないです。

# 論理演算子
if ($var1 && $var2 || $var3) {
  ...
}

「&&」は「||」よりも優先順位が高いです。優先順位を変えたい場合は括弧「()」を使用します。

if ($var1 && ($var2 || $var3)) {
  ...
}

Perlの論理演算子の評価の特徴

Perlの論理演算子は評価が決定した時点で評価をやめます。たとえば

$var1 && $var2

という条件があった場合、$var1が偽であれば「$var1 && $var2」は偽になることが決定するのでそこで評価は終わります。

$var1 || $var2

という条件があった場合は、$var1が真であれば「$var1 || $var2」は真になることが決定するのでそこで評価は終わります。

orを条件分岐として使う

このような性質を利用してorは条件分岐に使われることが多いです。たとえばopen関数が失敗した場合は次のように記述します。

open my $fh, '<', $file
  or die qq/Can't open file "$file": $!/;

open関数が成功した場合は真が返されるのでorの右辺は実行されません。open関数が失敗した場合はundefが返されるので右辺のdieが実行されプログラムは終了します。

もうひとつの例として、system関数と一緒に使われることもあります。system関数は成功すると0を返すので、次のように記述します。

system(@cmd) == 0
  or die "Can't execute command @cmd";

主要な処理を先に記述して、補足的なエラー処理を後で書きたい場合に、orによる条件分岐を使うことができます。

「and」を条件分岐に使うこともできますが、読みにくいので「or」をお勧めします。

# andで書き換えた例
system(@cmd)
  and die "Can't execute command @cmd";

サンプルプログラム

論理積、論理和、否定のサンプルです。

use strict;
use warnings;

# 論理積、論理和、否定
print "1. 論理積( A かつ B )\n";
my $num = 3;
if ($num > 1 && $num < 4) {
  print "\$numは、1より大きく、4より小さい\n\n";
}

print "2. 論理和( A または B )\n";
my $pet = 'dog';
if ($pet eq 'dog' || $pet eq 'cat') {
  print "\$pet は、'dog' あるいは、'cat' のどちらかである。\n\n";
}

print "3. 否定( Aでない )\n";
my $num0 = 0;
if (!$num0) {
  print "!\$num は、真\n";
}
  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。