パラメータ 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