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_1

Perl 「 モジュール 」CGI.pm 関数指向スタイル (0xb1)

Perl 「 モジュール 」CGI.pm 関数指向スタイル (0xb1)

目次 - Perl Index


Theme



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

Perl モジュール CGI.pm の、関数指向スタイルを確認する。



関数指向スタイル



Perl 「 モジュール 」CGI.pm オブジェクト指向スタイル (0xb0)

モジュール CGI.pm の関数指向スタイルでは、直接扱わないデフォルトのオブジェクトがあると言います。

関数指向スタイルでは、HTML の作成・クッキーの管理等を行う場合、直接オブジェクトを操作せずに、関数を呼び出して操作します。

この場合、インタフェースは簡素になりますが、オブジェクトは 1 度に 1 つしか扱えません。反対に言えば、オブジェクト指向スタイルでは、1 度に複数のオブジェクトを扱えるということです。

関数指向スタイルとオブジェクト指向スタイルの違いは、関数指向ではソースコードの名前空間に関数のセットをインポートする必要があることと、オブジェクトを明示的に作成しないということです。

通常関数のセットは、「 standard 」セットをインポートします。


HTML の生成



関数指向スタイルで、HTML の生成を確認します。

次のコードは perldoc.jp に例示されているものです。


use CGI qw/:standard/; # load standard CGI routine

print header, # create the HTTP header
start_html('hello world'), # start the HTML
h1('hello world'), # level 1 header
end_html; # end the HTML


3 行目からの print 文は、前回も確認した通り、読み易い様に改行してあるだけで、実際にはカンマ区切りのリストデータを print 文に渡してあるだけです。

オブジェクト指向スタイルでは、「 $q = CGI->new 」によって $q というオブジェクトを作成していましたが、関数指向スタイルではこれを行いません。

また、プラグマ use でモジュール CGI.pm を読み込む際に関数セット「 :standard 」を合わせて読み込んでいることが分かります。

上記の実行結果は次の通りです。


Content-Type: text/html; charset=ISO-8859-1

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>hello world</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1>hello world</h1>
</body>
</html>


この実行結果は、前回のオブジェクト指向スタイルで確認したと同じです。


インポート可能な関数セット



関数セット機能
:cgiparam(), path_into() のような, CGI を扱うすべてのメソッドをインポート
:formtextfield() のようなフォームを作成するメソッドをインポート
:html2HTML 2.0 標準要素を作成するすべてのメソッドをインポート
:html3HTML 3.0 標準要素を作成するすべてのメソッドをインポート ( <table>, <super>, <sub> 等 )
:html4HTML 4 標準要素を作成するすべてのメソッドをインポート ( <abbrev>, <acronym>, <thead> 等 )
:netscape<blink>, <fontsize>, <center> タグをインポート
:htmlすべての HTML 作成のためのショートカット ( html2, html3, html4, netscape ) をインポート
:standard標準の機能 ( html2, html3, html4, from, cgi ) をインポート
:all利用可能なすべてのメソッドをインポート ( 全リストは CGI.pm のコード中にある %EXPORT_TAGS で定義 )


CGI.pm の %EXPORT_TAGS は次の通り。ソースコードの 225 - 254 行目。


%EXPORT_TAGS = (
':html2'=>['h1'..'h6',qw/p br hr ol ul li dl dt dd menu code var strong em
tt u i b blockquote pre img a address cite samp dfn html head
base body Link nextid title meta kbd start_html end_html
input Select option comment charset escapeHTML/],
':html3'=>[qw/div table caption th td TR Tr sup Sub strike applet Param nobr
embed basefont style span layer ilayer font frameset frame script small big Area Map/],
':html4'=>[qw/abbr acronym bdo col colgroup del fieldset iframe
ins label legend noframes noscript object optgroup Q
thead tbody tfoot/],
':netscape'=>[qw/blink fontsize center/],
':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/],
':cgi'=>[qw/param upload path_info path_translated request_uri url self_url script_name
cookie Dump
raw_cookie request_method query_string Accept user_agent remote_host content_type
remote_addr referer server_name server_software server_port server_protocol virtual_port
virtual_host remote_ident auth_type http append
save_parameters restore_parameters param_fetch
remote_user user_name header redirect import_names put
Delete Delete_all url_param cgi_error/],
':ssl' => [qw/https/],
':cgi-lib' => [qw/ReadParse PrintHeader HtmlTop HtmlBot SplitParam Vars/],
':html' => [qw/:html2 :html3 :html4 :netscape/],
':standard' => [qw/:html2 :html3 :html4 :form :cgi/],
':push' => [qw/multipart_init multipart_start multipart_end multipart_final/],
':all' => [qw/:html2 :html3 :netscape :form :cgi :internal :html4/]
);



新しい HTML タグ



CGI.pm では、急速に発展する HTML に対して、CGI.pm 自体のバージョンアップを待たなくて済む様に、CGI.pm に含まれない関数名のインポートを可能としています。

CGI.pm に含まれない関数名をインポートすると、それは新しい HTML タグとして適切に処理されます。

perldoc.jp の例では、タグ <gradient> が新たに追加されたとして、以下のコードを例示しています。


use CGI qw/:standard :html3 gradient/;
print gradient({-start=>'red',-end=>'blue'});


1 行目の関数 ( シンボル ) のインポートで、「 gradient 」を指定していることに注目します。これは、CGI.pm の一部ではありません。

2 行目の print では、タグ <gradient> の仕様に従って開始・終了のカラーをしています。

これを実行すると次の結果が得られます。


<gradient end="blue" start="red" />


gradient がタグとして機能していることが分かります。

ちなみに、CGI.pm は、実行スピードの観点から、読み込む関数 ( シンボル ) を指定する場合に、Export の書式を使わないそうですが、将来的には変更される可能性があるとのことです。


0xb1 -> 0xb2 へ



次回も引き続きモジュール CGI.pm を確認します。

該当のドキュメントが、基本的にオブジェクト指向スタイルを前提に説明されているので、当 blog での確認もこれに準じます。

参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。

参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」


次回 (0xb2) へ続く。

目次 - 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 ▲