Perl Perl_1
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() の動作を確認してみましたが、配列変数 @keywords は空の配列になりました。
メソッド keywords() は、<ISINDEX> 検索の結果を模したオブジェクトでなければ、適切な値を返さない様です。いったい <ISINDEX> 検索の結果とはどの様な形式なのでしょうか。フーム。
ちなみに、Perl デバッガで確認したオブジェクト $query の中身は次の様になっています。
配列「 .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() はパラメータ名をリストで返すと言います。
例えば次の様に。
これは、上手いことパラメータ名を取得できました。
実行結果は次の通りです。
説明文の例示通りの文字列「 name1=value1&name2=value2&name3=value3 」を渡してもうまく動きました。クォートはシングルでもダブルでも問題ありません。
実行結果は次の通りです。
もし、スクリプトが <ISINDEX> スクリプトとして呼び出され、「 & 」( ampersand ) がない文字列 ( e.g. "value+value2+value3" ) が入っていたら、それは + を区切り文字とするキーワードが入った「 keywords 」という名前のパラメータになるとのことです。
!?
<ISINDEX> スクリプトとして呼び出された場合の値。それは例えば「 value+value2+value3 」の様になる。だ、と ?
それは、keywords という名前のパラメータになる。だ、と ?
それならば、ここでこそメソッド keywords() の確認が出来るのではないだろうか。そうした推測から次のコードを試してみました。
実行結果は次の通りです。
やったね。
ちなみに、この時のオブジェクト $query の中身は次の通り。
は、はーん。なんとなく、なるほど。
注意点: バージョン 1.5 では、パラメータ名はブラウザで実行されたのと同じ順番だった。通常、この順序は、パラメータがフォームで定義された順と同じだが、保証はされない。とのこと。
CGI.pm。その長い暗闇の奥深くにうす明かりが見えた。気がする。
参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。
参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」
次回 (0xb6) へ続く。
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 mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)