動的にパッケージをuseしたい件についてこの間のはおれが記事の意味を全然わかってなかったみたいです。

eval qq() とかやると require に bareword を渡すことができるんだろな。

ってちゃんと書いてあるのに。 やり方がやっとわかったのでControllerクラスを書いてみました。

package Controller;

use strict;
use vars qw($VERSION);

$VERSION = '0.01';

sub new { return bless({}, @_[0]); }

sub dispatch {
    my $self = shift;
    my ($class, $method) = @_;
    eval qq(require $class; import $class;); 
    my $c = new $class;
    $c->$method();
}
1;

「クラスとメソッドを渡すとクラスのメソッドを実行する」というだけ。Webアプリの場合そのままQueryStringで渡すのは危険なので(URLからパスの通った全ての好きなクラスの好きなメソッドを実行できる状態を想像してください)論理名をマッピングした方が良さそう。かといって、

&ltname="hellow" class="Hello" method="display"&gt

なんてXMLファイルを作るのも真面目過ぎる気がする。何か簡単なやり方は無いものか・・・。

Comments


Option