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

セラ (perlackline)

2014年09月11日 21:04



目次 - 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'=> 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










関連記事