むすんで、ひらいて、変数展開。

真里:加藤真里  シレ:シレスト=ノイデルファーム

シレ:前回はとりあえずprint文だけの簡単なスクリプトを組んでみました。

真里:で、さぁ、あれからいろいろとタグとかいっぱい書いてみたんだけどさ、なんかふつうにページ作るのとあまり変わり映えしないんだけど。

シレ:でもあれで、とりあえずprint "???";というふうになっているところを直すと、そこかしこで配布されているPerlで書かれたCGIの表示デザインなどを変えることができる、ということがわかりましたね?

真里:だけどさ、やっぱりタグ直接打つのとあまり変わらないんだけど……

シレ:……わかりました。じゃあ今日は「変数展開」ということについて勉強しましょう。ちょっと前に「クオート( ' )とダブルクオート( " )ってどう違うの?」と聞いていましたね?

真里:いつになったら話してくれるのかわかんないから半分あきらめてたけど……

シレ:今回はその答えになります。お待たせしました(汗)
とりあえず、下のスクリプトでクオートとダブルクオートの動作を比べてみます。
 

print "Content-type: text/html\n\n";

$hello = 'はろーわーるど!!';

print "<HTML><BODY BGCOLOR=#FFFFFF>\n";
print '<H2>クオート:$hello</H2>\n';
print "<H2>ダブルクオート:$hello</H2>\n";
print "</BODY></HTML>\n";

 

……そして、これをとりあえず自分のパソコンのPerlで実行してみると……
 

Content-type: text/html

<HTML><BODY BGCOLOR=#FFFFFF>
<H2>クオート:$hello</H2>\n<H2>ダブルクオート:はろーわーるど!!</H2>
</BODY></HTML>

 

……あれ?\nは改行と前回言ったはずのものが改行されず\nのまま、さらに$helloという中に入れたはずの「はろーわーるど!!」という文字列が$helloのまま残ってますね?

真里:……もしかして、今までウソついてた?

シレ:べ、べつにウソついていたわけじゃないですよ、、、

真里:あやしい。絶対あやしい。

シレ:本当ですって……ともかく、とりあえずはこれでクオートとダブルクオートの違いはわかりましたね?……つまり、$helloなどの変数を解釈するか否か、\n(改行)などを解釈するか否かの違いというわけです。

真里:うんうん。それは今のを見ればわかるって。……でもさ、$ とか \ とか、ほかのも展開されるんだとしたら @ とか % とかを「だぶるくおぉと」の中で表示するのはどうするわけ?例えば、本当に「$hello」の中身じゃなくてそのものを表示したいとするじゃない。

シレ:……はい、そのために逃げの一手があります。エスケープ文字(←だから「逃げの一手」なんですけど…笑)というものがありまして、例えば\$というふうにするとちゃんと$そのものを表示してくれます。

真里:……それって……さっきも出てきたけど「\nは改行文字」って言ったこととつじつまがあわないんだけど……
もし「\」がその、えす…なんとかだとしたら、\nはそのままnって表示されないと。

シレ:……それは「特殊な場合」なんです。例えば、\nなら改行…ほかにも\tならタブ文字などなど、特殊といっても結構たくさんあるので、\をつけたらそのまま表示されるんだぁ!と鵜呑みにして全部に"\c\o\u\n\t"などといううふうにエスケープをつけてしまうととんでもないことになってしまいます。

真里:……ふう、とりあえず、ぎりぎり理解したけど、、、

シレ:今回もゆっくり頭の中で整理してみてくださいね。

[次回に続く……]

 

←PREV | NEXT→

Return : Perl Top