问候,
我在学Moose http://search.cpan.org/~drolsky/Moose/我正在尝试写一个CGI::应用 http://search.cpan.org/~markstos/CGI-Application/Moose 的子类,由于 CGI-App 不基于 Moose,所以这变得很困难。
在我的其他 CGI-App 子类中,我喜欢有一个带有setup
方法查看子类的符号表并自动设置运行模式。我想我可以使用 Moose 的元类设施以更简洁的方式实现相同的目标。这是我在父类中的内容:
use MooseX::Declare;
class MyApp::CGI
extends Moose::Object
extends CGI::Application {
method setup {
$self->start_mode( 'main' );
my @methods = map { $_->name } $self->meta->get_all_methods;
$self->run_modes( map { /^rm_(.+)$/ => $_ }
grep { /^rm_/ }
@methods
);
}
}
...在我的孩子班上:
use MooseX::Declare;
class MyApp::CGI::Login
extends MyApp::CGI {
method rm_main {
return "it works";
}
}
我意识到我的运行模式无法正确设置的原因是setup
由 CGI-App 构造函数调用,并且Moose::Object
在我的类中粘贴它自己的构造函数。我尝试用方法修饰符解决这个问题:
around new {
$self = $orig->( @_ );
$self->CGI::Application::new( @_ );
}
这给了我
Can't call method "BUILDARGS" on unblessed reference at ...Moose/Object.pm line 21.
然而,我有一种感觉,我正在以完全错误的方式处理这件事,而穆斯有更好的设施来实现我想要的东西,但我还没有发现。
你已经看过了吗Moose::Cookbook::基础知识::DateTime_ExtendingNonMooseParent http://search.cpan.org/perldoc?Moose::Cookbook::Basics::DateTime_ExtendingNonMooseParent and MooseX::非Moose http://search.cpan.org/perldoc?MooseX::NonMoose?
Update:我对驼鹿和各种技术不太熟悉。我无法使用模块来编译MooseX::Declare
and MooseX::NonMoose
一起。然而,这里有一些似乎有效的东西:
应用程序基类
package My::App;
use Moose;
use MooseX::NonMoose;
extends 'CGI::Application';
sub setup {
my $self = shift;
$self->start_mode( 'main' );
$self->run_modes(
map { $_ = $_->name;
/^rm_ (?<rm>.+) $/x ? ( $+{rm} => $_ ) : ()
} $self->meta->get_all_methods
);
}
"My::App"
派生类
package My::Login;
use Moose;
extends 'My::App';
sub rm_main { 'it works!' }
"My::Login"
Script
#!/usr/bin/perl
use strict;
use warnings;
# For testing on the command line
use FindBin qw( $Bin );
use lib $Bin;
use My::Login;
my $app = My::Login->new;
$app->run;
Output
C:\Temp\f> t
Content-Type: text/html; charset=ISO-8859-1
it works!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)