unless文
「if」文では続いて記述された条件式が真の場合の処理を記述するのに使われますが、似た制御構造を持つものとして「unless」文があります。「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; unless ($seiseki < 60){ print "合格です¥n"; print "おめでとう¥n"; } print "お疲れ様¥n";
上記を「test6-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
( Written by Tatsuo Ikura )