From hylinux at gmail.com Sun Sep 6 09:17:17 2009 From: hylinux at gmail.com (Mike.G) Date: Mon, 7 Sep 2009 00:17:17 +0800 Subject: [PerlChina] =?gb2312?b?udjT2lBlcmy1xGF0dHJpYnV0ZXO1xNPDt6g=?= Message-ID: <74646cb40909060917i17dcaa55q240b31a0ec76c499@mail.gmail.com> 今天在使用一个C:A的插件的时候碰到一个问题: C:A:Plugin::ActionDispatch 这个模块是使用attributes的特性来判断runmode的 有个问题是 例如: when I define some runmode in parent class. just like package Myparentclass; use base qw/CGI::Applicatin/; use CGI::Application::plugin::ActionDispatch; sub cgiapp_prerun { my $this = shift; if ( some condition ) { $this->prerun_mode('mode1'); } } sub mode1:Runmode { it is here } 1; and in Child Class package MyChild; use base qw/Myparentclass/; 1; when the "some condition" true, in parent class, it will be run mode1, but it doesn't work: said: No such run mode 'showcity' at /home/ghw/myperl/in-marry/app/store line 13 但是把这个runmode定义在store的模块中可以的。 所以我猜测是C:A:Plugin::ActionDispatch中有问题了。 打开源代码看了一下。发现整个核心是使用attributes来做的。 一直没明白attributes的作用。 哪位大大可以讲讲? 看了一下perldoc,不太明白。 谢谢 Mike.G -------------- next part -------------- An HTML attachment was scrubbed... URL: From hylinux at gmail.com Sun Sep 6 10:31:53 2009 From: hylinux at gmail.com (Mike.G) Date: Mon, 7 Sep 2009 01:31:53 +0800 Subject: [PerlChina] =?gb2312?b?udjT2lBlcmy1xGF0dHJpYnV0ZXO1xNPDt6g=?= In-Reply-To: <74646cb40909060917i17dcaa55q240b31a0ec76c499@mail.gmail.com> References: <74646cb40909060917i17dcaa55q240b31a0ec76c499@mail.gmail.com> Message-ID: <74646cb40909061031o5bda39bfld99a5b23559168e4@mail.gmail.com> attributes的用法还是不太明白。 还是得需要各位提点一下。主要是到底是怎么用的。 其实C:A::Plugin::ActionDispatch倒是一个实例,可惜没怎么看明白。 好像是根据attributes调用相应的设置好的子过程。 主要是attributes会取得一个列表,然后匹配。 另外代码里需要的功能倒是搞定了。 主要是C:A::Plugin::ActionDispatch没有打断原来的model 2009/9/7 Mike.G > 今天在使用一个C:A的插件的时候碰到一个问题: > C:A:Plugin::ActionDispatch > > 这个模块是使用attributes的特性来判断runmode的 > > 有个问题是 > 例如: > when I define some runmode in parent class. > just like > > package Myparentclass; > use base qw/CGI::Applicatin/; > use CGI::Application::plugin::ActionDispatch; > > sub cgiapp_prerun { > my $this = shift; > if ( some condition ) { > $this->prerun_mode('mode1'); > > } > > } > > > sub mode1:Runmode { > it is here > > } > > 1; > > and in > Child Class > > package MyChild; > use base qw/Myparentclass/; > > > > 1; > > when the "some condition" true, in parent class, it will be run mode1, > but it doesn't work: > said: > > No such run mode 'showcity' at /home/ghw/myperl/in-marry/app/store line 13 > > 但是把这个runmode定义在store的模块中可以的。 > 所以我猜测是C:A:Plugin::ActionDispatch中有问题了。 > 打开源代码看了一下。发现整个核心是使用attributes来做的。 > > 一直没明白attributes的作用。 > 哪位大大可以讲讲? > 看了一下perldoc,不太明白。 > > 谢谢 > > > Mike.G > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From hylinux at gmail.com Sun Sep 6 10:39:00 2009 From: hylinux at gmail.com (Mike.G) Date: Mon, 7 Sep 2009 01:39:00 +0800 Subject: [PerlChina] =?gb2312?b?usO+w8O7w/5QZXJstcTT77eowcujrNXiuPbT77eo?= =?gb2312?b?sNHO0rj4xNG1ucHL?= Message-ID: <74646cb40909061039t9c3511ge8b8dc4f3926a703@mail.gmail.com> 好久没模Perl的语法了。 在看attributes的文档的时候一直出现这个语法,比较郁闷。 哪位提点一下: use attributes (); my ($x, at y,%z); attributes::->import(__PACKAGE__, \$x, 'Bent'); attributes::->import(__PACKAGE__, \@y, 'Bent'); attributes::->import(__PACKAGE__, \%z, 'Bent'); ($x, at y,%z) = 1; 第一个地方: attributes::这个写法是省略了什么来着? 第二个地方: import 我记得是在use的时候自动的调用module的import方法是不是?(例如module require Exporter), 这样就有了一个缺省的import方法 但是问题是attributes哪儿定义了这个方法呢? 请各位指点。 谢谢 Mike.G -------------- next part -------------- An HTML attachment was scrubbed... URL: From hylinux at gmail.com Sun Sep 6 19:38:57 2009 From: hylinux at gmail.com (Mike.G) Date: Mon, 7 Sep 2009 10:38:57 +0800 Subject: [PerlChina] =?gb2312?b?0ru149DEtcO52NPaRGF0YTo6Rm9ybVZhbGlkYXRl?= =?gb2312?b?us2y5bz+Q0dJOjpBcHBsaWNhdGlvbjo6UGx1Z2luOjpWYWxpZGF0?= =?gb2312?b?ZVJN?= Message-ID: <74646cb40909061938r7b2390c8g2c486fbf0790c116@mail.gmail.com> 上次问了几个关于Data::FormValidate的自定义规则检查的问题。 这些天重新看了看文档,然后再写了不少代码。 分享一下心得。 文档上推荐的自定义规则的定义方法是这样的: sub customer_rule_sub { my $parame1 = shift; my $parame2 = shift; return sub { my $dfv = shift; (Data::FormValidate::Result 对象) my $val = $dfv->get_current_value #作一些处理 } } 这样定义的好处就是在定义profile的时候可以传入参数。 这样很多检查规则就可以完全使用这个框架了解决了。 而不用另外写代码来检测。 如上 Mike.G -------------- next part -------------- An HTML attachment was scrubbed... URL: From hylinux at gmail.com Sun Sep 6 22:33:07 2009 From: hylinux at gmail.com (Mike.G) Date: Mon, 7 Sep 2009 13:33:07 +0800 Subject: [PerlChina] =?gb2312?b?usO+w8O7w/5QZXJstcTT77eowcujrNXiuPbT77eo?= =?gb2312?b?sNHO0rj4xNG1ucHL?= In-Reply-To: <74646cb40909061039t9c3511ge8b8dc4f3926a703@mail.gmail.com> References: <74646cb40909061039t9c3511ge8b8dc4f3926a703@mail.gmail.com> Message-ID: <74646cb40909062233o2b74d3e7jef3e2e11e47672b7@mail.gmail.com> 没人知道么? Mike.G 2009/9/7 Mike.G > 好久没模Perl的语法了。 > 在看attributes的文档的时候一直出现这个语法,比较郁闷。 > 哪位提点一下: > > use attributes (); > my ($x, at y,%z); > attributes::->import(__PACKAGE__, \$x, 'Bent'); > attributes::->import(__PACKAGE__, \@y, 'Bent'); > attributes::->import(__PACKAGE__, \%z, 'Bent'); > ($x, at y,%z) = 1; > > > 第一个地方: > attributes::这个写法是省略了什么来着? > 第二个地方: > import > 我记得是在use的时候自动的调用module的import方法是不是?(例如module require Exporter), > 这样就有了一个缺省的import方法 > 但是问题是attributes哪儿定义了这个方法呢? > > 请各位指点。 > > 谢谢 > > Mike.G > -------------- next part -------------- An HTML attachment was scrubbed... URL: