Your SlideShare is downloading. ×
Mastering CGI::Application
Mastering CGI::Application
Mastering CGI::Application
Mastering CGI::Application
Mastering CGI::Application
Mastering CGI::Application
Mastering CGI::Application
Mastering CGI::Application
Mastering CGI::Application
Mastering CGI::Application
Mastering CGI::Application
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Mastering CGI::Application

44,385

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
44,385
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Mastering CGI::Application 2008/05/12 Hideo Kimura
  • 2. CGI::Application
    • CGI::Application クラスを継承してメソッドをオーバーライドしてフックポイントをほげほげして作るフレームワーク
  • 3. フックポイント
    • my %INSTALLED_CALLBACKS = (
    • # hook name package sub
    • init => { 'CGI::Application' => [ 'cgiapp_init' ] },
    • prerun => { 'CGI::Application' => [ 'cgiapp_prerun' ] },
    • postrun => { 'CGI::Application' => [ 'cgiapp_postrun' ] },
    • teardown => { 'CGI::Application' => [ 'teardown' ] },
    • load_tmpl => { },
    • error => { },
    • );
    • sub をオーバーライド実装することによって各フックポイントに登録される
  • 4. 呼び出し順序
    • new
    • init   (cgiapp_init)
    • setup
    • run
    • prerun (cgiapp_prerun)
    • [runmode]
    • ( errror (error) if $@ )
    • postrun (cgiapp_postrun)
    • teardown (teardown)
  • 5. コールバックインターフェース
    • sub cgiapp_init {
    • my ( $self, @args ) = @_;
    • }
    • sub cgiapp_prerun {
    • my ( $self, $rm ) = @_;
    • }
    • sub cgiapp_postrun {
    • my ( $self, $bodyref ) = @_;
    • }
  • 6. コールバックインターフェースの意味
    • 意外と自由
    • ただ perldoc によると
      • 設定ファイルの読み込みなんかは init
      • setup は runmode の設定とテンプレートパスに使うべき
      • 認証や runmode の変更は prerun
  • 7. Plugin の書き方
    • add_callback([hook point], CODEREF)
      • 既存のフックポイントにコールバックを登録
    • new_hook ([hook point])
      • 新たにフックポイントを追加する
    • call_hook([hook point], args)
      • フックポイントを呼び出す
    • Exporter でメソッドを生やす
  • 8. Plugin で拡張
    • package CGI::Application::Plugin::MyPlugin;
    • use vars qw(@EXPORT);
    • use base ‘Exporter’;
    • @EXPORT = qw(my_method);
    • sub import {
    • my $pkg = shift;
    • my $callpkg = caller;
    • $caller->add_callback(‘init’, ‘my_init’);
    • $caller->new_hookpoint (‘my_hook’);
    • goto &Exporter::import
    • }
  • 9. お勧め Plugin
    • CGI::Application::Plugin::Template
    • CGI::Application::Plugin::Session
    • CGI::Application::Plugin::ConfigAuto
    • CGI::Application::Plugin::FillInForm
    • CGI::Application::Plugin::Redirect
    • CGI::Application::Plugin::Forward
    • CGI::Application::Plugin::Stash
  • 10. 結論
    • いいとこ
      • かなりシンプル (620 行くらい )
      • Plugin が結構豊富
    • だめなとこ
      • シンプルすぎる = ディスパッチャーとしての機能しかない
      • その割にディスパッチが面倒
        • CGI::Application::Dispatch とかあるけど、あれを使うくらいなら Catalyst のほうがまし
    • 小規模なら CGI::Application 、大規模なら Catalyst
  • 11. ご清聴ありがとうございました
    • m(_ _)m

×