unless文を使った条件分岐

if 文では条件式を評価した結果が真だった場合に、そのあとに記述されたブロック内の処理を実行しますが、 unless 文では条件式を評価した結果が偽だったばあに、そのあとに記述されたブロック内の処理を実行します。ここでは Perl で unless 文を使った条件分岐を行う方法について解説します。

(Last modified: )

unless文の使い方

unless 文は if 文と逆に条件式が偽だった場合にそのあとに記述されたブロック内の処理を実行します。 unless 文の書式は次の通りです。

unless (条件式){
  条件式が偽の時に実行する処理1;
  条件式が偽の時に実行する処理2;
}

条件式を評価し、条件式が偽だった場合に続くブロック内の処理を実行します。

実際のプログラム例としては次のようになります。

my $seiseki;

$seiseki = 75;
unless ($seiseki < 60){
  print "合格です\n";
  print "おめでとう\n";
}

今回の例では条件式として変数 $seiseki に格納されている値が 60 よりも小さいどうかを評価します。条件式が偽となるとき、つまり変数の値が 60 以上の場合に { から } で囲まれたブロック内の print "合格です\n";print "おめでとう\n"; が実行されます。

unless 文は if 文を使って記述することができます。先ほどの例を if 文で書き直すと次のようになります。

my $seiseki;

$seiseki = 75;
if ($seiseki < 60){
}else{
  print "合格です\n";
  print "おめでとう\n";
}

if 文で else 節しかないものと考えることができます。または論理否定の ! 演算子を使って次のように記述することもできます。

my $seiseki;

$seiseki = 75;
if (!($seiseki < 60)){
  print "合格です\n";
  print "おめでとう\n";
}

どのような記述方法をしても結果は同じです。 if 文と unless 文を混在させて使用しても構いませんが、 if 文だけを使い、条件式が真(true)の時にブロック内が実行されるように統一しておいたほうが分かりやすいのではないかと思います。

unless...else文

if 文と同じく unless 文でも else を使うことができます。

unless (条件式){
  条件式が偽の時に実行する処理1;
  条件式が偽の時に実行する処理2;
}else{
  条件式が真の時に実行する処理1;
  条件式が真の時に実行する処理2;
}

ただこれは if 文を使って次のように記述することができます。

if (条件式){
  条件式が真の時に実行する処理1;
  条件式が真の時に実行する処理2;
}else{
  条件式が偽の時に実行する処理1;
  条件式が偽の時に実行する処理2;
}

その為、あえて unless...else 文を使う必要はありません。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my $seiseki;

$seiseki = 75;
print "得点は $seiseki です。\n";
unless ($seiseki < 60){
  print "合格です。\n";
}else{
  print "不合格です。\n";
}

$seiseki = 58;
print "得点は $seiseki です。\n";
unless ($seiseki < 60){
  print "合格です。\n";
}else{
  print "不合格です。\n";
}

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

unless文を使った条件分岐(1)

unless 文を使って条件式の結果によって異なる処理を実行しました。

-- --

Perl で unless 文を使った条件分岐を行う方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。