blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_1

Perl 「 モジュール 」CGI.pm キーワードとパラメータ名のリスト (0xb5)

Perl 「 モジュール 」CGI.pm キーワードとパラメータ名のリスト (0xb5)

目次 - Perl Index


Theme



Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0xb5 回。

Perl モジュール CGI.pm の、キーワードリストとパラメータリストを確認する。




Perl 「 モジュール 」CGI.pm オブジェクト指向スタイル (0xb0)
Perl 「 モジュール 」CGI.pm 関数指向スタイル (0xb1)
Perl 「 モジュール 」CGI.pm HTML ショートカット (0xb2)
Perl 「 モジュール 」CGI.pm 名前の衝突と独自の名前 (0xb3)
Perl 「 モジュール 」CGI.pm ファイルハンドルとオブジェクトの初期化 (0xb4)


クエリからキーワードリストを取り出す



If the script was invoked as the result of an <ISINDEX> search, the parsed keywords can be obtained as an array using the keywords() method.

もし スクリプトが呼びだされた場合 <ISINDEX> 検索の結果として, キーワードを解析し 取得する 配列として keyword() メソッドを使って.

これは次の様に記述します。


@keywords = $query->keywords


試しに次の様にして、メソッド keywords() の動作を確認してみましたが、配列変数 @keywords は空の配列になりました。

メソッド keywords() は、<ISINDEX> 検索の結果を模したオブジェクトでなければ、適切な値を返さない様です。いったい <ISINDEX> 検索の結果とはどの様な形式なのでしょうか。フーム。


my $query = CGI->new( {'dinosaur' => 'barney',
'song' => 'I love you',
'friends' => [qw/Jessica Greoge Nancy/]}
);

my @keywords = $query->keywords;

foreach ( @keywords ) {
print "$_\n";
}


ちなみに、Perl デバッガで確認したオブジェクト $query の中身は次の様になっています。


DB<1> x \$query
0 REF(0x81eaa8)
-> CGI=HASH(0xf06fe8)
'.charset' => 'ISO-8859-1'
'.fieldnames' => HASH(0xf5aec8)
empty hash
'.parameters' => ARRAY(0xf5add8)
0 'friends'
1 'song'
2 'dinosaur'
'escape' => 1
'param' => HASH(0xf4d168)
'dinosaur' => ARRAY(0xf5b0e8)
0 'barney'
'friends' => ARRAY(0xf5afb8)
0 'Jessica'
1 'Greoge'
2 'Nancy'
'song' => ARRAY(0xf5af18)
0 'I love you'
'use_tempfile' => 1



配列「 .parameters 」の要素 0 に friends, 要素 1 に song, 要素 2 に dinosaur が格納されています。

さらに、ハッシュ「 param 」には key dinosaur の value に配列 (0xf5b0e8) があり、その要素 0 に barney が格納されています。

key friends の value 配列 (0xf5afb8) には、要素 0 Jessica, 1 Greoge, 2 Nancy が格納されています。

key song の value 配列 (0xf5f18) には、要素 0 に I love you が格納されています。

今のところこうした配置の意味までは掴めていませんが、興味深いです。


あなたのスクリプトから渡されたすべてのパラメータ名の取り出し



もしスクリプトがパラメータ付きで呼び出された場合 ( e.g. "name1=value1&name2=value2&name3=value3" )、メソッド param() はパラメータ名をリストで返すと言います。

例えば次の様に。


@names = $query->param


これは、上手いことパラメータ名を取得できました。


my $query = CGI->new( {'dinosaur' => 'barney',
'song' => 'I love you',
'friends' => [qw/Jessica Greoge Nancy/]}
);

my @names = $query->param;

foreach ( @names ) {
print "$_\n";
}


実行結果は次の通りです。


firends
song
dinosaur


説明文の例示通りの文字列「 name1=value1&name2=value2&name3=value3 」を渡してもうまく動きました。クォートはシングルでもダブルでも問題ありません。


my $query = CGI->new("name1=value1&name2=value2&name3=value3");


実行結果は次の通りです。


name1
name2
name3


もし、スクリプトが <ISINDEX> スクリプトとして呼び出され、「 & 」( ampersand ) がない文字列 ( e.g. "value+value2+value3" ) が入っていたら、それは + を区切り文字とするキーワードが入った「 keywords 」という名前のパラメータになるとのことです。

!?

<ISINDEX> スクリプトとして呼び出された場合の値。それは例えば「 value+value2+value3 」の様になる。だ、と ?

それは、keywords という名前のパラメータになる。だ、と ?

それならば、ここでこそメソッド keywords() の確認が出来るのではないだろうか。そうした推測から次のコードを試してみました。


my $query = CGI->new( 'value+value2+value3');

my @keywords = $query->keywords;

foreach ( @keywords ) {
print "$_\n";
}


実行結果は次の通りです。


value
value2
value3


やったね。

ちなみに、この時のオブジェクト $query の中身は次の通り。


DB<1> x \$query
0 REF(0x940318)
-> CGI=HASH(0xf5a4d8)
'.charset' => 'ISO-8859-1'
'.fieldnames' => HASH(0xf5a888)
empty hash
'.parameters' => ARRAY(0xf3e198)
0 'keywords'
'escape' => 1
'param' => HASH(0xe56d28)
'keywords' => ARRAY(0xf5a8b8)
0 'value'
1 'value2'
2 'value3'
'use_tempfile' => 1


は、はーん。なんとなく、なるほど。

注意点: バージョン 1.5 では、パラメータ名はブラウザで実行されたのと同じ順番だった。通常、この順序は、パラメータがフォームで定義された順と同じだが、保証はされない。とのこと。


0xb5 -> 0xb6 へ



CGI.pm。その長い暗闇の奥深くにうす明かりが見えた。気がする。

参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。

参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」


次回 (0xb6) へ続く。











同じカテゴリー(Perl)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲