Perl Perl_2
Perl 「 モジュール 」 CGI 実用的なファイルアップロード 10 アップロードの処理 序 (0x117)

目次 - Perl Index
Theme
Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x117 回。
CGI.pm で、実用的なファイルアップロードの処理を確認する。その 10 回。アップロードの処理に際してサブルーチンを呼び出す部分を確認する。
ファイルのアップロード処理
Cgi upload - perlmeme.org で紹介されている、実用的なコードでは、ファイルアップロードの処理が次の様に記述されています。
if ($q->param()) {
save_file($q);
}
print $q->end_html;
exit 0;
パラメータの存在確認
ここではまず、メソッド param() を使って、「 名前付きパラメータ 」が存在するかを確認しています。これは、(0xb5) で確認した、パラメータ名のリストを返す、メソッド param() の機能を利用しています。
パラメータ名を持ったなんらかの値の存在を確認出来たら、今度はサブルーチン「 save_file() 」に CGI オブジェクトそのものを渡しています。
プロトタイプ宣言済みのサブルーチン
サブルーチン save_file() は、(0x110) で確認した様に、プログラム冒頭で「 プロトタイプ宣言 」を行っているので、サブルーチンのシジル「 & 」を付加することなく、つまり、Perl の組込み関数の様に利用出来ます。
save_file() の引数には、CGI オブジェクト「 $q 」を渡しています。プロトタイプ宣言では、「 $ 」を利用してスカラコンテキストを指定していますが、Perl のオブジェクトは実質的に「 リファレンス 」なので、これで良いのだと理解します。
ちなみに、Perl のオブジェクトはリファレンスですが、通常はクラスパッケージ内で公に "bless" されているデータへのリファレンスをオブジェクトと呼ぶ様です。「 bless 」等を含むオブジェクトの詳細は、perlobj - Perl のオブジェクト に詳しい解説があります。
サブルーチン save_file() による処理が完了すると、プログラムは HTML のエンドタグを出力し、関数「 exit 」に引数「 0 」を渡して終了する様に書かれています。
サブルーチン save_file()
ファイルのアップロードを実際に処理するサブルーチン「 save_file() 」では、引数で渡されたオブジェクトのデータを、新たなオブジェクトにコピーしたり、必要な変数を初期化した後に、各種実用的な処理が書かれます。
0x117 -> 0x118 へ
次回は、実用的なアップロード処理の詳細、つまりサブルーチン「 save_file() 」の中身を確認します。
#// FreeBSD 9.3-RELEASE
現在 Perl プログラミングと並行して FreeBSD の環境構築を確認しています。
過去何度かトライしていて、デスクトップ/日本語環境の構築や、Web ブラウザの利用等までは辛うじてクリアしているのですが、やはり基礎が分からないと安心感を得られない性質の僕は、公式ドキュメントを 1 つずつ確認しながら少しずつ環境を再構築しています。
もちろん X Window System を利用する方向で構築するわけですが、ウィンドウマネージャの「 twm 」( Tom's Window Manager ) に興味が湧いてしまって、やや四苦八苦している現在です。
思う様に進まない部分が多々ありますが、それでも過去にデーモン君 に突き刺されて流した涙が、それなりに無駄ではなかったことを実感しています。
っていうか、
GLib-CRITICAL **: g_slice_set_config: assertion `sys_page_size = 0' failed
ってなんだよちきしょう。Firefox ぇ。。
参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。
目次 - Perl Index
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)