へたれCGI講座



13:スカラー変数(その3)編


 お腹くだりつつ更新する女、はなですこんにちは。
のど飴が原因ということで一安心なので更新しまーす。ではいってみましょー!

■コンテキスト■
 私的にはあまり用語は知る必要がない気もしますが、本などで勉強を進める場合にガシ ガシと専門用語が出てくるので、一応専門用語も説明しましょう。
 コンテキストとは、変数などで式を計算する際、どのような形で表して欲しいのか、という 概念です。これじゃわかりにくいですね。実例で見てみましょう。

$a = $b - 1

この場合、式の中に - (マイナス)が使われているので、$bには数値が入るんじゃないかなって予測が できますよね。前に勉強したように、文字列の演算値は「.」(ピリオド)と「x」
(エックス(かけ算的意味で使われます。数値のかけ算は*。))ですから…。
つまり、$bには数値が入ると期待される、というか予測できます。
この状態を「数値コンテキスト」と言います。
 わかりにくいかな?要するに、期待される値の種別ということです。

 また、

$a = $b . "abc"

 この場合になりますと、ピリオドが使われており、"abc"という文字列が入っているため、 $bは文字が求められるということで「文字列コンテキスト」と言います。
 また、現在はスカラー変数を勉強していますね。
ですので、大きく言うと「スカラーコンテキスト」とも言えます。


■スカラー変数の注意点■
 さて、かなり勉強が進んできましたが、ここで一つ大事な注意点があります。
次の場合、どう表示されるか予測できますか?
スカラー変数もこれで最後なのできっちり書いてみましょうか。

#!/usr/local/bin/perl

#HTMLをはじめる宣言
print "Content-type: text/html\n\n";

#HTML開始
print "<HTML>\n";
print "<HEAD><TITLE>練習問題</TITLE></HEAD>\n";
print "<BODY>\n";

#スカラー変数代入
$a = "ha";

print = "私の名前は$anaです<BR>\n";

print "</BODY>\n";
print "</HTML>\n";
__END__

 かなーり極端な例ですが…。
変数$aに「ha」が入っており、「私の名前はhanaです」と表示したいところですが…
実際このCGIを実行すると「私の名前はです」と表示されてしまいます。

 これは、変数の定義をしなくてすむPerlの穴です。
要するにPerlくんは$aという変数を$anaだと勘違いしてしまって、以前に学んだundef値
(今回の場合空文字)として扱ってしまっているのです。

 このように英字と変数の区別が付いていない場合に、区別を付ける方法があります。
それが${変数名}です。
今回は、print = "私の名前は$anaです<BR>\n";の部分に問題があるわけですから、 きちんと、今使用したい変数は$aだとPerlくんに教える必要があります。

そこで問題の部分を修正してみましょう。
print = "私の名前は${a}naです<BR>\n";
 これで実行すると、Perlは「なるほど、使用する変数は$aね。りょうかーい」と理解して
きちんと「私の名前はhanaです」と表示してくれます。

 今回の例は極端ですから、利用しないんじゃないのー?と思いがちですが、結構利用
するので覚えておいてください。


 さて、今回でスカラー変数編は終わり…にしようと思ったのですが、簡略化された表示方 法の説明をすっかり忘れていたので、次回、演算子の簡略化の説明でスカラー変数は
終わりにしたいと思います。また予告を裏切ったなぁ。


BACK NEXT
CGI-Index TOP