LESSON7 ちょっとはいじりたい

ああ、やっぱ仕事の後の一杯は美味いな。
あ・・あの、すみません。おじさんはどなたですか?
あ!!!!!
え?何?何?
(モゾモゾ)
なんでも無いニャリよ。
うぉえ!!着ぐるみかよ!!!!
何がニャン?ニャンチュウはニャンチュウニャン。
ああ、駄目だ・・もう駄目だ。超ブルー。ニャンチュウが実はおっさんだったなんで・・。
・・・ちいせー事、気にするなよ。
幼児には大問題です!
・・・そうか、幼児の夢を壊して悪かったな・・ごめんよ。
・・てか前回の可愛い猫の意味が分からないし。
これも視聴率を取る為なんだ。おじさんも家族を養う為に仕方なくこの仕事しているんだ。
・・なんて嫌な世の中なんだろう・・・誰か抗鬱剤下さい。
そうさ。これが現実さ。夢や希望ばかりじゃないんだよ。坊や。おじさんは今日はこれで失礼するよ。副業のパートのアルバイトがあるんでね。
・・そっか。おじさんも大変なんだね。
今度会うときは笑顔でニャンチュウって呼んでおくれよ・・
うん、分かったよニャンチュウ。
・・・ありがとう。じゃあな・・あばよ、またな。
ニャンチュウ、ばいばい・・!。

よう、坊主。
あ、ジミー。
早速、今日の授業開始だ。
授業開始っておねえさんは?。
だから知らねーって。そんなことより今日もガンガンいくぜ。
だってこのコーナー「おねえさんおしえて!」ってタイトル付いてるよ!?
んなことはどうだっていいだろ。あんま気にすんな。さ、勉強勉強。
(みんなどこいっちゃったんだ・・・)
よう、坊主。CGIはうまくいってるのか?
え?う、うん。設置はうまくいったよ。
そうかいそうかい。そりゃ良かったな。でも最低限変えてそのままサーバに転送してるんだろ。
・・まあね。あんま変にいじって動かなくなったら嫌だし・・。
まあ賢明な判断だな。へたにいじって動かなくなったらまずいし、最悪サーバーダウンを引き起こさないとも言えないからな。
え!?サーバーダウン!?
そうさ。まあ滅多にそんなことにはならないけどな。なんでもかんでもいじりゃいいってわけでもない。CGIには設置者がいじっていい箇所があるからそこをいじれば大丈夫さ。ただし、ちゃんと理解してないとCGIは動かなくなったりはするけどな。
そっか。でもなんだか怖いな。
だから今日はそこを勉強しようってことさ。
まず、基本的にいじるのはcgiって拡張子がついたファイルだ。その中にPerlという言語で書かれたプログラムが入っている。これをテキストエディタってので開くんだけど、テキストエディタってのはわかるよな。テキストファイルを開くことが出来るソフトの事だ。Windowsにはメモ帳とワードパッドっていうテキストエディタがあるが、メモ帳は容量のでかいファイルはメモリの関係で開くことができないし、ワードパッドはとにかく重いからな。フリーで配布されてる専用のテキストエディタをダウンロードするのが一番いいな。マイクロソフトのWordで開くのなんてのは論外だ。おっと、cgiとかdatなんてのは標準では認識されないから、ちゃんと拡張子の関連付けを忘れずにな。
なんか今日はまともな展開だね。
そうね。今日はギャグなしだぜ♪
でも、いじっていいところってどこ?。
大概「設定はここまで」って書いてあるところさ。「ここから先は変更しないでください」とか「この先はご自分の責任で変えてください」「そこはいじらないで私をいじって・・♪」なんて書いてある場合もあるけどな。
んな事書いてねーだろ・・!
これはCGI作成者によって色々違うな。全くいじるなってCGIもある。その辺は自分で確認してみてくれ。
僕の設置したいCGIは設定ここからここまでってのが書いてあるよ。
OK。じゃ注意して見てみよう。
うん。なんか$なんちゃらってのが多いね。$cgiurlとか$bodyとか$tableとか。$bodyは体のことかな。
Perlでは$マークのついた単語を変数と呼ぶんだ。
変数?
聞きなれない言葉だろ。要は箱だな、箱。データを入れることの出来る箱さ。
じゃあbodyとかtableとかっていうのは?
特に意味はないのさ。箱の名前だな。別に$bodyじゃなくて$karadaとか$kubireとかでもいい。要は作成者がわかりやすいように勝手に名前をつけているんだ。
なるほどね。$bodyも$tableも同じことなんだね。
そう。名前の違う別の箱ってことだな。更に見てみよう。
$xxx = 1;
こういう風に書いてないか?
うん。色々な$なんとかにイコールなんとかって書いてあるね。
そうだ。これが1つの命令文ってやつで、実行しろっていうプログラムなわけだ。$xxxという名前の変数(箱)があったとして、それがイコール1ってことだ。
うん?1と等しいってこと?
いや、プログラムの場合その変数に代入せよって意味になる。
代入?
簡単に言うと、その箱に1って数字を入れてくださいってことだ。例えば$doubutuという変数があったとして、「$doubutu = うさぎ」だったとしよう。そうすると$doubutuという変数に「うさぎ」って言葉を入れろ。つまり今度からは$doubutuはうさぎになるんだ。
え?ちょっとわかんない・・・。
Perlにはprint文っていうのがある。
print $doubutu
printなになにとやるとそのなになにが表示されるんだが、上記のようにやると画面にはうさぎって表示されるんだ。つまり$doubutuっていう箱のなかにうさぎが入っているんだな。
へーなんか面白いね・・・。
ただ、「$doubutu = うさぎ」のままだとエラーになるんだがな。
エラーってなに?
エラーってのは間違っている、つまりプログラムのどこかがおかしくて動かないってことだな。
エラーしましたみたいなこと?
そういうことだ。さっきの文をちゃんと書くと次のようになる。
$doubutu = 'うさぎ';
あれ?うさぎの前と後ろに点がついてるね。
そう、Perlでは数値でないものと変数でないものはクォーテーションで囲まなくてはならない。「'」シングルクォーテーションでもいいし、「"」ダブルクォーテーションでもいい。前が「'」だったら当然後ろも「'」な。
そかそか。数値で無いものというと単語とか文章とかだね。点と点ではさむんだね。
点だったらなんでもいいわけじゃないぜ?「"」と「'」な。それと必ず半角を使うこと。時々全角スペースを入れたりしてることがあるがこれだとエラーになるから気をつけてな。
エラー怖いなー。
それと注意して欲しいのが。シングルクォーテーションで囲むんだったら間にシングルクォーテーションを入れるなってことなんだ。
どういうこと?
次のようにするとエラーになるぞ。
$title = 'Tanaka's Homepage';
え?どうして?ちゃんと点で囲んでるよ?
確かに囲んではいるが Perlは今の文を $title = 'Tanaka' で区切って判断するんだ。わかるか?間に「'」が入ってるので「ああ、ここで終わりなのね」って解釈して残りの「s Homepage';」は「これはなんですか?」ってなことになる。だからエラーになるんだ。
ああ、なるほどね。クォーテーションからクォーテーションまでを1つのデータとして判断しちゃってるからか。
同様に次の場合もエラーになる。
$title = "電撃 "解散"宣言!!";
ちなみにこれだと問題ない。
$title = "Tanaka's Homepage";
じゃあシングルクォーテーションで囲んだら、間には絶対にシングルクォーテーションをいれちゃいけないってこと?
どうしても入れたいならこうすればいい。
$title = 'Tanaka\'s Homepage';
\'?
そう、\マークは次の文字を「単なる文字ですよ」ってPerlに教える機能がある。つまり\の後ろの「'」はデータを囲んでる「'」じゃなくて単なる文字だから関係ありませんよってPerlに教えてるんだ。これなら問題無い。\そのものを表示させたい場合は\\とすればいい。
ふんふん、なるほど。そういえばさっきから一番最後に「;」ってついてるね。あれ?よくみると殆ど「;」がついてるぞ。
セミコロンだな。これはこの命令文がここで終わりますってことだ。これがないとエラーになる。
じゃこの最後のセミコロンは消しちゃいけないんだね?
PerlやC言語は基本的にどこで改行しても問題なく動く。柔軟性のある言語だ。例えば
$doubutu = 'うさぎ';
こういう書き方をしてもいいし、
$doubutu
=
'うさぎ';
こういう書き方をしてもいい。
まあ$douとbutuの間で改行みたいに変数の間で改行したらまずいけどな。また間の半角スペースは全て無視されるので、$doubutu='うさぎ';とスペースを入れなくても可だ。そうなってくるとどこまでが1つの文なのか判断できないので、最後にセミコロンをいれるんだ。
そっかー。なるほど。でもついてないのはなんなの?
#(シャープ)がついているやつだろう。この「#」は特別の意味があって、この後に続く文章は1行まるまる無視して下さいって意味だ。だから「# フォントサイズ」とあったからといって「フォントサイズ」の前後をクォーテーションで囲む必要は無い。Perlが「#」の後を1行まるまる無視するから関係ないんだ。これをコメントというんだが文字通り、注釈したり説明書きをいれたりする為のものだ。
そっかーなるほどね。シングルクォーテーション(')とダブルクォーテーション(")に違いはないの?
いいところに気付いたな。実は明確な違いがあるんだ。シングルクォーテーション(')で囲まれた文は変数展開せず、ダブルクォーテーション(")で囲まれた文は変数展開するという意味がある。
うーん、変数展開ってなに?
さっき説明したprint文を例にとって見てみよう。3パターンあるね。上はクォーテーションなし、真ん中はシングルクォーテーション、下はダブルクォーテーションだ。
print $doubutuは耳が長い;
print '$doubutuは耳が長い';
print "$doubutuは耳が長い";
全然わかりません。
一番上はエラーになる。何故なら変数と数値以外はクォーテーションで囲まなくてはならないからだ。$doubutuは確かに変数だからクォーテーションはいらないが「は耳が長い」は文章なので必要だ。
うんうん。そこまではわかるよ。
下の2つはエラーにはならないが、違う表示されかたをする。$doubutuという変数には何が入ってるんだっけ?
うさぎだね。
じゃ下の2つを表示するとどうなるか。真ん中は「$doubutuは耳が長い」一番下は「うさぎは耳が長い」と表示される。
あ!そっか!変数展開されないっていうのはそのままその変数が表示されるってことなんだね。
That's Right。ただそれだけの違いだね。だから変数が入っていないならシングルで囲もうがダブルで囲もうが表示のされ方は同じだ。
今まで分からなかったけどそういうことだったんだね。
最後に配列の話をして今日の授業を終えよう。
いよいよ終盤だね。配列ってなんだろう。
さっき、変数という話をしたが、変数は基本的に一個しかデータを入れることができない。例えば以下の例を見てみよう。
$doubutu = 'うさぎ';
$doubutu = 'かめ';
こういう文があったとする。上の文は$doubutuにうさぎを入れてるんだが、下の文で今度はかめをいれてる。前のうさぎはこの時点で消えるんだ。
ああ、そっかなるほどね。
そこで配列というものを使う。まあ一種の変数みたいなもんなんだが、沢山入れることができるんだ。変数は$で始まっていたけど、配列は@から始まる。$があれば変数、@があれば配列だ。使い方はこんな感じだ。
@doubutu = ('うさぎ','かめ','たぬき');
ああ、なんとなくわかるね・・。三つ入ってるんだね?
そう。1つ1つはクォーテーションで囲んでるのがわかるよな?その一つ一つの間に半角カンマ「,」が入ってる。カンマでそれぞれの単語を区切ってるわけだ。その全体を「()」で囲んだのが配列だ。最後にセミコロンで文を終わりにしてる。
そういうお約束なんだね?
たまにデータが長いと改行をいれて見やすくしたりする。たとえばこんな感じだね。
@jikan = (
    '7時です。今日も良い天気ですね。',
    '8時です。ご飯は食べましたか?',
    '9時です。遅刻はしませんでしたか?'
);
なんか全然感じが変わってくるね。
でもさっきの配列とやってることは全く同じなのさ。改行を入れてるだけでね。配列をいじるときはカンマやクォーテーション、カッコ、セミコロンなど抜けてるところが無いか、注意しながらやんないとエラーになるぞ。
そっかー。なんとなく分かったよ。
これで坊主もエキスパートだな。
でもジミーいつのまにそんなに覚えたの?
徹夜で猛特訓さ!これからはいつでも俺に聞け!
(まさか、あんたこのCGI SCHOOLをのっとろうとしてるんじゃ・・・・)

おしまい


Copyright 2000-2003 Missing Link All Rights Reserved.