インターネット&PC120%活用:インターネット活用編
変数その2
Perlの変数には数値型、文字型の区別がないと前回書きました。
これは、CとかBASICとか、変数の型を厳密に区別するその他の言語からみると、超便利な感じ
がする一方、ちょっと問題ありそうな(なんかプログラムミスしそうな)感じもしたりします。
だって、文字型と数値型の足し算が平気でできてしまうものですから。他の言語ならエラーが出るような
場合でも、何の問題もなく実行されてしまう(結果は予期せぬ結果がでるはず)ケースが多いでしょうから。
それでは、簡単な例をみてみましょう。
以下のプログラムで
$a,$b は数値。$c は文字列です。
$d は 「数値+数値」 のごく一般的足し算
$e は数値の連結(演算記号「 .
」は文字列の連結の演算記号)。すなわち本来数値のものを文字列として連結
$f は 数値と文字列の連結
$g は$fと数値の足し算です。
$a = 1;
$b = 2;
$c="abc";
$d = $a + $b;
$e = $a . $b;
$f = $a .$c;
$g=$f+5;
print '$d ', "こたえは$d\n";
print '$e こたえは', $e,"\n";
print '$f こたえは',$f,"\n";
print '$g こたえは',$g;
|
それでは実行してみます。BASICでは数値と文字列をごちゃまぜにした演算は全部エラーがでますが、
Perl ではあれ不思議、みなそれなりの結果がでてしまいます。
D:\jplwin32>jperl vtest.pl
$d こたえは3
$e こたえは12
$f こたえは1abc
$g こたえは6
D:\jplwin32> |
他の言語では、”そんなのありえなーい”と言われそうな、$e, $f, $g の結果についてみてみます。
$e は数値同士を連結して文字列にして結果をだしています。
Basic
であえてこれと同じような演算をするとしたら
a = 1
b = 2
e$ = str$(a)+str$(b)
というところでしょうか
$f
は数値と文字列を連結して文字列として結果をだしています。
妙なのは$g
の結果でしょう。これは数値と文字列(先頭が数字)の足し算です。
なんと、足し算が成立しています。他の言語なら確実にエラーがでるところですが、Perlではこんな
ことができてしまうのですね。
逆に言うとこの柔軟性?は、バグのおこりやすい点かもしれません。
TopPage
|