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 実用的なファイルアップロード 10 アップロードの処理 序 (0x117)

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)の記事
 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 ▲