|
条件文
真と偽
変数の初期化のところでも触れましたが、Perlでは間違ったものを 0 か空文字で表し、正
しいものを 1 という値で表します。
または、逆に 0か空文字 なら偽、それ以外なら真という判断もします。
例、
#!c:/perl/bin/perl
print "Content-type: text/html; charset=Shift_JIS\n\n";
$x = 0;
$y = 5;
print ($x < $y); print '<br>';
print ($x > $y); print '<br>';
if ($x) {print '真'} else {print '偽'} print '<br>';
if ($y) {print '真'} else {print '偽'} print '<br>';
↓
1
偽
真
|
1行目 $x は $y より小さく($x < $y)は正しいので、真である「1」を表示。
2行目 $x は $y より小さく($x > $y)は間違ってるので空文字を表示。
3行目 0 は偽。
4行目 5 は真。何か入っていたら全て真と判断される。
空文字とはスペースではなくて '' というように何も入っていない状態のことを言います。
未定義と何も入っていない''は微妙に意味が違います。
if文
上の例でも出ていますが、if という文字、これは条件文といって、英語の if と同じ意
味です。
で、もし条件文が正しければ実行文を実行しなさいという意味になります。
また、
if(条件文){実行文1}
else {実行文2}
|
条件文が真なら実行文1を、それ以外なら実行文2を実行しなさい。
if (条件文1){実行文1}
elsif(条件文2){実行文2}
|
条件文1が真なら実行文1を、それ以外で条件文2が真なら実行文2を実行しなさい。
となります。
elsif は何個でもつなげることができます。
文末に ; はいりません。
()内の条件文は論理演算子でつなげることが出来ます。
{}内の実行文は何個あっても良いです。
{}内に条件文を入れても良いです。
例、
#!c:/perl/bin/perl
print "Content-type: text/html; charset=Shift_JIS\n\n";
my $x1 = '初めはツンツン';
my $x2 = '後でデレデレ';
my $y = '普通';
if ($x1 eq '初めはツンツン' and $x2 eq '後でデレデレ'){
if ($y eq '美人'){
$z1='要注意だ';
$z2='マークせよ!';
$z3='繰り返す、';
$z=$z1.$z2.$z3.$z2.$z3;
} else {
$z='無視';
}
} elsif ($y eq '美人') {
$z='他の属性だが要注意だ';
} else {
$z='女は愛嬌だ!と言ってドリルパンチ';
}
print $z;
↓
無視
|
例題的にもプログラミング的にも最悪の例えですが、なんとなく分かっていただけたでし
ょうか。(^-^;
unless文
ifと反対の条件文です。
もし条件文と違ったら実行文を実行しなさいという意味になります。
else や elsif の使いどころは if文と同じです。elsunlessとかはありません。
#!c:/perl/bin/perl
print "Content-type: text/html; charset=Shift_JIS\n\n";
my $love = "";
unless ($love){
print "目からビームはでない";
}else{
print "たまに出る";
}
↓
目からビームはでない
|
↓同じ。
if ($love){print"たまに出る";}else{print"目からビームはでない";}
修飾子
あとこんな書き方もできます。
実行文 if 条件文
実行文 unless 条件文
|
条件文で else とか elsif のない場合、実行文の後ろにくっつけるだけでおkです。
()や{}が要りません。
単純な条件文だとこういう書き方をするのがエレガントだと言う人がいますが、私は、よく使いはするけどあんまりそんなふうに思いません。
#!c:/perl/bin/perl
print "Content-type: text/html; charset=Shift_JIS\n\n";
my $x = 3;
print "凶でしゅんっ" if $x=0;
print "吉でまあまあ" if $x=1;
print "中吉でどうよ" if $x=2;
print "みっくみく♪" if $x=3;
↓
みっくみく♪
|
条件演算子
さらにこんな書き方もできます。
まず条件式を評価し、それが正しければ式1を、間違いならば式2を返します。
なので使いどころとしてはこんな感じで変数に代入することが多いです。
#!c:/perl/bin/perl
print "Content-type: text/html; charset=Shift_JIS\n\n";
my $years = 31;
my $result = $years > 20 ? "おっきなおともだち" : "それなりにオタク";
print $result;
↓
おっきなおともだち
|
だいたいプログラムの文を短くしたい欲のために存在するのだと思います。
↓のように書くのと同じです。
my $years = 31;
my $result;
if ($years > 20) {
$result = "おっきなおともだち";
} else {
$result = "それなりにオタク";
}
print $result;
三項演算子とも呼びます。
こうすると五項演算子とか言うのかな。七項、九項……とか幾らでも増やせるかもですがやめれ。
$a = $b ? $b : ($c ? $c : 0);
$aには$bが真なら$b、そうじゃなくて$cが真なら$c、それでもなければ0を代入。
デフォルト値を設定する
うわ〜ん。Use of uninitialized value 〜 がいっぱいだよ〜。(>_<)ノ
とかいうときのために。
|| または ||= を使用します。これは文字列と数値の両方に使えます。
$bが真なら$b、偽なら$c
$a = $b || $c;
|
0または"0"を有効とするときはdefinedを使います。
$bが定義されていれば$b、そうでなければ$c
$a = defined($b) ? $b : $c;
|
ex.
my $key = $self->query->param('key') || '';
if ($key){〜
このとき my $key = $self->query->param('key'); で$self->query->param('key')が未定義だったりしたら、次のif文でUse of uninitialized value 〜のワーニングが出ます。よく使うルーチンで更にループ内とかだったらエラーログが悲惨w。
|
アフィリエイトについて
「楽して儲けたい」を実現する為のツールとして世間に広く知れ渡っているものです。
これを利用している人をアフィリエイターと言います。私もこのサイトに商品紹介リンク
を貼っているのでアフィリエイターです。いや、自称アフィリエイターというべきか。
2006.5.29現在で収益ゼロです。ここは儲けようと思って作ったサイトでもないので参考
になりませんが世の中にはいくらか稼いでいる人もいるようです。
一応参考までに紹介しておきます。
アマゾンです。
萌えPerlでは本の紹介に利用しています。
電脳卸です。
報酬率は高いですがこのサイトのコンテンツと合う商材が無いので紹介のみ。
あとメニューバーの下に表示されているのは Google AdSense です。
ページの文字列を解析して自動的にいろんな広告が表示されるので便利です。
申し込みは↓
すみませんでした。
|
|