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_2

Perl 「 モジュール 」 CGI.pm start_form 確認継続 (0xfd)

Perl 「 モジュール 」 CGI.pm start_form 確認継続 (0xfd)

目次 - Perl Index



Theme



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

CGI.pm で、HTML フォームの開始と終了を表す要素を生成するメソッド「 start_form() 」をもう少し確認する。



パラメータ enctype



前回確認した通り、メソッド start_form() では、通常次の 2 つの enctype を指定出来ます。

application/x-www-form-urlencoded

multipart/form-data


application/x-www-form-urlencoded



enctype「 application/x-www-form-urlencoded 」は、古くからあるエンコードタイプです。古いタイプであることから、ずっと以前から稼働している多くの CGI スクリプトと互換性があります。

通常、このエンコードタイプは「 テキストデータが入った短いフィールド 」で利用します。


multipart/form-data



enctype「 multipart/form-data 」は、比較的新しいエンコードタイプです。

このエンコードタイプは、「 大きなデータを扱う 」場合に適しています。大きなデータとは、大きなフィールドのテキストデータやバイナリファイル等です。

このエンコードタイプで最も重要な機能は、ファイルのアップロードを実現出来ることです。


エンコードタイプはサブルーチンに格納されている



エンコードタイプ multipart/form-data と application/x-www-form-urlencoded は、利便性を高めるために、それぞれサブルーチン「 &CGI::MUTIPART 」と「 &CGI::URL_ENCODED 」に格納されていると言います。

何が便利なのか、今の僕にはさっぱり分からないので、CGI.pm のコードを確認します。

ファイル CGI.pm の先頭から、「 URL_ENCODED 」を検索すると、まず次の行にマッチングしました。

CGI.pm
---

':form'=>[qw/textfield textarea filefield password_field hidden checkbox checkbox_group
submit reset defaults radio_group popup_menu button autoEscape
scrolling_list image_button start_form end_form startform endform
start_multipart_form end_multipart_form isindex tmpFileName uploadInfo URL_ENCODED MULTIPART/],


これは、(0xb1) で確認した、%EXPORT_TAGS の一部です。

%EXPORT_TAGS には、CGI.pm で利用可能なメソッド ( 関数 ) 群が列挙されてますが、その「 form 」セットの中に「 URL_ENCODE 」と「 MULTIPART 」が記述されている訳です。

ということは。。という見当を胸にして、次のマッチング行にジャンプします。

すると、985 行目から次の記述がありました。

CGI.pm
---

'URL_ENCODED'=> <<'END_OF_FUNC',
sub URL_ENCODED { 'application/x-www-form-urlencoded'; }
END_OF_FUNC

'MULTIPART' => <<'END_OF_FUNC',
sub MULTIPART { 'multipart/form-data'; }
END_OF_FUNC


「 URL_ENCODED 」と「 MULTIPART 」の名前でサブルーチンを呼び出せる様にしています。サブルーチンの中身はと言えば、文字列リテラルでエンコードタイプ名が記述されているだけです。

なるほど、やはり。


エンコードタイプを簡単に指定する



通常、start_form でパラメータ enctype を指定する場合は、次の様に記述します。


print $q->start_form(-enctype => 'application/x-www-form-urlencoded');
# または
print $q->start_form(-enctype => 'multipart/form-data');



しかしながら、&CGI::URL_ENCODED と &CGI::MULTIPART を使えば次の様に記述出来ます。


print $q->start_form(-enctype => $q->URL_ENCODED);
# または
print $q->start_form(-enctype => $q->MULTIPART);



(0xb1) で確認した関数指向スタイルなら、さらに簡潔に記述出来ます。


use CGI::Pretty qw/ :standard /;

print start_form(-enctype => URL_ENCODED);
# または
print start_form(-enctype => MULTIPART);



無用なタイプ数を減らした労力の削減と、タイプミスの確立を軽減する、確かに便利な設定です。


0xfd -> 0xfe へ



今回の疑問は、CGI.pm のコードを直接読むことですぐに解決出来ました。無暗にインターネットを徘徊するよりもはるかに短時間の出来事でした。

ソースコードを読むことと、インターネットを検索することの、どちらがより適切なのかは状況によりけりだと思われますが、そうした状況判断も含めて、Perl ( プログラミング ) の理解が進んでいることを実感しました。

次回も、もう少しメソッド「 start_form() 」を確認します。


参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。

目次 - Perl Index











同じカテゴリー(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 ▲