|
Perl/CGI研究室 'PERL-LABO' TOPへ |
戻る(History.Back) |
?〜 という形でなにかIDを送り、そのIDでジャンプ先を変えます。 ただし今度は連想配列を使ってみます。
IDとURLは1対1に対応していますので、こういう時は連想配列が便利かも知れません。 連想配列の方がプログラムがすっきりしそうですし、 テストしたジャンプ先のはyahooとgoogleの2つだけでしたが、 これがもっと数が増えたら if 文だとどんどんプログラムが長くなって気持ち悪いかも? ということで連想配列を使うようにしたいと思います。
連想配列に値を入れるには、$連想配列{'名前'}=値 でよかったんですよね。 なので、IDとURLを対応させるには次のようにすればいいわけです。
$url{'yahoo'} = 'http://www.yahoo.co.jp/';
$url{'google'} = 'http://www.google.co.jp/';
これでもいいんですが、連想配列には「初期化」っていう機能があるんだそうです。 初期化っていうのは、初めからこういうデータを入れておいてくださいっていうことですね。 やり方は、
%連想配列 = (名前, 値, 名前, 値, ...);
とするんだそうです。ですから、今回のプログラムでは
%url = ( 'yahoo', 'http://www.yahoo.co.jp/', 'google', 'http://www.google.co.jp/', );
となりますね。
これまで、1つの命令は1行にしていましたが、 このように、命令は複数行に分けても大丈夫です。 最後の ; のところまで、途中に改行があってもちゃんと理解してくれます。 (こういうのを、フリーフォーマット言語っていうらしいです。)
if 文のときは、else 〜 のところでエラーの処理をしていました。 連想配列の場合は、その名前に対応する値があるかどうかを調べて、 対応する値が無ければエラーになるようにしないといけません。 これはどうやってやるんでしょうか?
それには、exists というのを使います。
これは、連想配列の中で、その名前に対応する値があるかどうかを調べて、
あれば true、無ければ false を返すというものです。
使い方は、
exists $連想配列{調べたい名前}
です。これの true/false で処理を分けたい場合は、もちろん if 文ですね。
そうそう。今まで、連想配列で「名前」という言い方をしてきましたが、 これ、「キー」というんだそうです。 $連想配列{キー}=値、です。 なので、この exists は、キーの存在を調べる命令っていう言い方になります。
#!/usr/bin/perl
$id = $ENV{"QUERY_STRING"};
%urltable = (
'yahoo', 'http://www.yahoo.co.jp/',
'google', 'http://www.google.co.jp/',
);
if (exists $urltable{$id}) {
print "Location: $urltable{$id}\n";
print "\n";
}
else {
print "Content-type: text/html\n";
print "\n";
print "ID:$idは登録されていません。";
}
次のリンクをクリックしてみてください。
うん、なかなかいいんじゃないでしょうか。 これなら、URLが増えてもプログラムはスッキリしますね!
%連想配列 = (名前, 値, 名前, 値, ...); です。
exists $連想配列{調べたい名前} です。
|
Perl/CGI研究室 'PERL-LABO' TOPへ |
戻る(History.Back) |
| Copyright (c) 'PERL-LABO' All Rights Reserved. リンクフリーです。 |