インターネット&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


inserted by FC2 system