www.ugnews.info

if文 続き

お前の血は何色だ、こんばんはugnewsです。
こないだのif文がまだちょっと残っていたのでそれやった。マニュアル人間だし、本通りにやっていかないと不安だ!!

まずは、数の比較と文字列の比較。文字として比較するか、数として比較するか。12と9の場合、数としてみれば12の方がそりゃ大きいけど、文字列で見ると9の方が大きいとみなされる。理由は、12の最初の1が「1」として解釈されてしまうから。まあ数と文字列の比較演算子の表はこことか見てください。

こういうのを書いた。

my $a = 12;
my $b = 9;

# その1
if ($a > $b) {
	print "$a > $b\n";
} else {
	print "$a le $b\n";
}

# その2
if ($a gt $b) {
	print "$a gt $b\n";
} else {
	print "$a le $b\n";
}

gt というのは、$aが$bより大きい場合が真になる条件式。実行するとこうなる。

12 > 9
12 le 9

「その1」の方が、真の方の結果で出るのはそのまんまだけど「12 > 9」だから。「その2」の方は、説明したとおり、1として解釈されちゃってるから「1 > 9」となるわけ。で、9の方が大きいわけで偽の方の $a le $b が実行結果に表示される。


―――――――――――――――――――――


次は、数が入力されたのか判断するプログラム。

my $line = <STDIN>;				# ユーザ入力
chomp($line);					# 改行を取り除く
if ($line =~ /^\d+$/) {				# 文字列?
	print "$lineは数字列だ!!\n";		# はい!!
} else {
	print "$lineは文字列ではない!!\n";	# いいえ
}

実行すると、こんな感じになる。

1111
1111は数字列だ!!

数字以外を入力すると、

unko
unkoは文字列ではない!!

と出る。条件式に書かれてる $line =~ /^\d+$/ というのは、なんか色々書かれてる。めんどせえ。なんか「この式の詳しい意味は第7章で学びます」とか書かれてるし。まだ第3章なので詳しいことはいずれ書くと思います。


―――――――――――――――――――――


オマケ 〜デバッグプリントの制御〜

if文を使ってデバッグプリントの有無を切り替えられるようにするには、

my $debug = "1";

if ($debug) {
	print "うんこうんこ\n";
	print "うんこうんこ\n";
}

あるいは、

print "うんこうんこ\n" if ($debug);

とif修飾子モードで書いてみると

うんこうんこ
うんこうんこ

と出ます。大便が爆発する。で、この $debug の値を0にするとデバッグプリントを無効にできる。これは便利のような気もするけど、どういうときに使えばいいのかちょっとピンとこないなー。たまたま書いてたプログラムを実行したときにエラーが出た場合、この値を0にしておくと間違ってる部分を探しやすくなる!とかそんなんでいいのかな。でも、それだといちいち print があるところはif文で括っておかなきゃダメなんじゃないのか。うーむ。


―――――――――――――――――――――


ひとまずここまで。このプログラムを書いて、それをこうしてブログに書くまでに1時間かかった…。

次は第4章「配列とリスト」をやるよ。