※このサンプルの解説は、「CGI(Perl)の解説」をすべて読み終えてる方を前提としています。

■ 変数の結合と分割

今回は「変数の結合と分割」ですが、特に命令があるわけではありません。
「変数の結合」は、変数の内容を結合する上での便利な方法を解説します。
「変数の分割」は、変数を利用する上でよくミスを起こしそうな点を解説します。

【 解    説 】

まず、2つの変数「$str1」「$str2」にそれぞれ次のような文字がセットされていた場合。
$str1 = "aaa";
$str2 = "ccc";

この2つの文字を結合して「$str0」にセットする場合、通常次のように記述します。
$str0 = $str1.$str2;

さらにこの文字列を半角空白で区切って記述する場合は次のようになります。
$str0 = $str1." ".$str2;

この「.(ピリオド、ドット)」で結合していくというのがどうも私は好きになれなくて..
というのもいろいろな結合をしていくと複雑になってきますし、見落としたりします。
また、「"(ダブルクォーテーション)」を入れ間違えたりしてしまいます。
例えば次のような例を見てください。
$str0 = $str1." ".$str2." ".$str1." ".$str2." ".$str1." ".$str2;

このような場合、私は次のようにして変数、文字列を結合します。
$str0 = "$str1 $str2 $str1 $str2 $str1 $str2";

どうです? ずっと見やすく、シンプルになったと思いませんか?
これはPerlの持つ変数展開という手法をうまく使った例です。

さて、この方法を取ったときひとつの問題が発生します。
それは、次のような場合です。

ふたつの変数の間に「bbb」という文字を入れて結合してください。
たぶん、次のように記述しますよね。
$str0 = "$str1bbb$str2";

実はこのように記述した結果「$str0」「ccc」だけとなります。
この時の問題は、「$str1bbb」です。
このままでは変数「$str1bbb」と認識され、「$str1」とはならないのです。

こんな時は、次のように変数「{}」で区切ると正しい結果が表示されます。
$str0 = "${str1}bbb$str2";

また、次のように部分的に区切る方法もあります。
$str0 = "$str1"."bbb$str2";

上記の命令を確認するため次のようなサンプルを作ってみました。

【記述サンプル】
#!/usr/bin/perl print << "END_DOC"; Content-type:text/html\n\n <HTML> <HEAD> <title>変数の結合と分割</title> </HEAD> <BODY> END_DOC $str1 = "aaa"; $str2 = "ccc"; $str0 = $str1.$str2; print $str0."<br>\n"; $str1 = "aaa"; $str2 = "ccc"; $str0 = $str1." ".$str2; print $str0."<br>\n"; $str1 = "aaa"; $str2 = "ccc"; $str0 = $str1." ".$str2." ".$str1." ".$str2." ".$str1." ".$str2; print $str0."<br>\n"; $str1 = "aaa"; $str2 = "ccc"; $str0 = "$str1 $str2 $str1 $str2 $str1 $str2"; print $str0."<br>\n"; $str1 = "aaa"; $str2 = "ccc"; $str0 = "$str1bbb$str2"; print $str0."<br>\n"; $str1 = "aaa"; $str2 = "ccc"; $str0 = "${str1}bbb$str2"; print $str0."<br>\n"; $str1 = "aaa"; $str2 = "ccc"; $str0 = "$str1"."bbb$str2"; print $str0."<br>\n"; print << "END_DOC"; </BODY> </HTML> END_DOC
◆実行結果について

上記のサンプルを「vardev.cgi」という名前で保存して実行してみてください。

実行結果はこちらをクリックしてください。
なお、実行結果については、各々のサーバーの環境、ユーザーの環境にによって内容は変わってきます。


page update:2010/01/23 20:32

Copyright (c) 2000-2009, all Rights Reserved & Produced by atom