へたれCGI講座



12:スカラー変数(その2)編

 仕事の時間が空いたので更新する女、はなです(毎回キャッチフレーズ付けるのかよ)。
現在風邪っぴきなんで、ケアレスミスがあったらご指摘ください^^;
では早速本題まいりましょうー♪

■undef値■
 さて、ある程度変数について勉強してきましたが、まだまだ変数には勉強すべきことがあ ります。例題でも出してみましょうか〜。

以前に数値の変数計算について勉強しましたよね?
それをもう一度思い出してみてください。

$a = 10;
$b = 9;
$c = $a - $b;
$cに入った値はわかりましたか? そう、1ですね。
では次の場合はどうなるでしょう。
$a = 10;
$c = $a - $b;
あらら? $bに値が入ってないですよね。これじゃあエラーになっちゃうんじゃ…?
 ところがどっこい(言い回しが古いな)、Perlではエラーにならないのです。
この場合だと「$a」からは「0」が引かれ「$c」には「10」が代入されることになります。

では文字の場合も見てみましょう。
$x = "abc";
$y = "def";
$z = $x . $y;
 これもわかりますよね? 「$z」には「abcdef」が入っています。
ではこれはどうでしょう?
$x = "abc";
$z = $x . $y;
 あらあら、ここでも「$y」に何も代入されていないのに使われちゃってますね。
これもエラーになりそうなんですが、ならないんです。
 この場合、「$z」には「abc」が入っています。

 なんとなくわかってきたでしょうか?
あらかじめ値が導入されていない変数が出てきた場合、Perlでは空の箱とみなし、数値で は「0」、文字では""(空文字)と仮定されます。
これを、Perlでは未定義の変数ということで「undef値」と言うのです。


■注意点■
 まず1つめですが、「undef値」は割り算には使えません。 というかプログラム言語では 大体「0」で割ろうとするとエラーになります。

 そして2つ目、これはまだ調べ中なのではっきりと言えないのですが…恐らくPerlでは演算子で何の計算 (文字の結合なのか、数値の計算なのか)を求められているか判断していると思われます。
 なぜそう私が思っているのかと申しますと…

$z = "40人" - "30人";
という計算をすると、「$z」にはなんと「10」という値が入るのです。
 混乱のもとになりそうな気もしますが、実際プログラムを長々書く際、こういう書き方がで きると何の計算をしているのか解りやすくて便利とも言えますよね?

-----追記-----03/01/21
えーと一応追記します。
$a = "2" - 1
この式の$aに何が入るかわかりますか? 正解は数値の「1」です。

では次です。
$a = "2人" - 1
もうお解りでしょうか? これも$aには数値の「1」です。
 このように、演算子が数値演算子で、数値計算が可能な場合はなんでもかんでも
計算してくれます。 混乱しがちなので、例を増やしてみました。
-----追記終了-----

注:この使い方は反則的かもしれません。現在調べ中ですが、補足出来る方がいらっしゃい
  ましたら補足お願いします^^;


今回はこれくらいにしましょうか。
スカラー変数の注意点はまだまだ続きます〜。頑張りましょう〜(つか早く風邪治せ自分)!

BACK NEXT
CGI-Index TOP