■■■■■■■■■■■■■■■■■■■■ CGI講座・リプレイ -第7講- Perlにおける変数(2) ■■■■■■■■■■■■■■■■■■■■ ■1、変数宣言■ 前回の講義でPerlにおける変数の特徴として「undef値」を挙げたが これをもう少し詳しく見てみよう。 他のプログラム言語であれば、 変数を使う時には「変数宣言」が必要である。 言語によって多少の違いはあるが、基本的には (変数で使用するデータの種類) 変数名=初期値 の形であらわすことができる。例えばJavaという言語を例に挙げると int kingaku=1000 ; (中略) println(kingaku) と、このようになる。ここで「変数宣言」にあたるのは int kingaku=1000 ; (使用するデータは整数、変数名は「kingaku」、初期値は1000) の部分であり、もしもこの部分が抜けたり、 使用するときに変数名を間違えたりする(kingaku→kinkakuなど)と 即座にエラーとなり、プログラムは動かなくなってしまう。 また、変数に入るデータも数値なのか文字列なのかと あらかじめ定義されるため、文字列が入る、と定義してしまうと その中に数値を入れても文字列として認識されるため 計算などはできなくなってしまう。 ■2、神出鬼没な変数■ これに対してCGI作成で使用するPerlの変数はとてもシンプルである。 たいていの場合は何か初期値を与えるため $変数名=初期値; の形が使われるが、極端なことを言ってしまえば $変数名 これだけでも十分に変数として機能する。 ただ、初期値が与えられていないとCGIが機能しないため、 初期値が与えられていない時には勝手に仮の初期値を設定してしまう。 この「仮の初期値」を「undef値」というが、 数値として扱う時には「0」、文字列として扱う時には「(空白)」が 自動的に代入される。 これのおかげでPerlでは変数に初期値が入っていなくても問題なく動く。 ■3、undef値の落とし穴■ 初期値を設定しなくても変数が使える。 これによる有利な点とは何だろうか? 例えば入力用のフォームと結果を表示している部分が 一つのファイルにまとまっているものであれば 初期値を与えないまま変数を使いたい、ということはあるかもしれない。 また、何らかの理由で初期値がいくつになるかわからない、というときにも この変数の特徴は有利な点となるだろう。 しかし、初期値を設定しないでも、変数宣言をしないでも気軽に使える、 という特徴ゆえに致命的な欠点も存在する。 冒頭の変数宣言の話を思い出してもらいたい。 変数宣言を必要とするプログラムでは 宣言していない変数は使えないため、 変数のつづりが間違っているときにはエラーになり、 その原因が変数名を間違えたからだ、ということがすぐにわかる。 例:Javaのプログラム(変数名が異なるためエラーとなる) int kingaku=1000 ; (中略) println(nedan) だが、Perlの場合は変数名が間違っていても その間違えた変数名を「新しい変数」と解釈するため 何の問題もなく実行できてしまう。 例:Perlのプログラム(空白が代入されるため、何も表示されない) $kingaku=1000; print "$nedan"; 実際にCGIで動かしてみる時には「今週のお手本」から ダウンロードして使ってもらいたいが、 変数宣言のあるプログラムだとエラーになる内容であるにもかかわらず 問題なく動いてしまう。 ゆえに、Perlにおいて一番厄介なエラーとは何かと言うと この変数の間違いによるプログラムの実行結果の食い違いである。 なまじ動いてしまうがために エラーが起こっていることに気がつかないことも多い。 なんだか前回の焼き直しみたいになってしまい 新しい内容に入れなかったが、スペースがないので 次回も変数の特徴について話す事にする。 第8講につづく --------------------------------------------------------------------- 発行人: 塚田 伊助 発行所: 伊助の鍛錬場 http://isukenet.s20.xrea.com/ 連絡先: isuke_tukada@hotmail.com
もどる