我有一个基于mod_perl2的Web应用程序,需要连接到mysql数据库.我已经以驼鹿角色实现了SQL连接细节.
简化后,该角色如下所示:
package Project::Role::SQLConnection;
use Moose::Role;
use DBIx::Connector;
has 'connection' => (is => 'rw', lazy_build => 1);
has 'dbh' => (is => 'rw', lazy_build => 1);
has 'db' => ( is => 'rw', default => 'alcatelRSA');
has 'port' => ( is => 'rw', default => 3306);
has 'host' => ( is => 'rw', default => '10.125.1.21');
has 'user' => ( is => 'rw', default => 'tools');
has 'pwd' => ( is => 'rw', default => 'alcatel');
#make sure connection is …Run Code Online (Sandbox Code Playgroud) 考虑在Moose :: Cookbook :: Basics :: Recipe3中开发的二叉树
要按预先检索所有节点,我可以将以下子例程添加到BinaryTree包中
sub pre_order {
my ($self,$aref) = @_;
push @$aref, $self->node;
pre_order($self->left,$aref) if $self->has_left;
pre_order($self->right,$aref) if $self->has_right;
}
Run Code Online (Sandbox Code Playgroud)
sub必须像这样使用:
my $btree = BinaryTree->new;
#add some nodes
#then later...
my @nodes_in_preorder;
$btree->pre_order(\@nodes_in_preorder);
Run Code Online (Sandbox Code Playgroud)
我如何更改子程序才能使用如下语法:
my @nodes_in_preorder = $btree->pre_order();
Run Code Online (Sandbox Code Playgroud)
为了能够做的事情
for ($btree->pre_order()) { #bla bla }
Run Code Online (Sandbox Code Playgroud)
稍后的.
这有意义吗,还是我迂腐?
我试图扩展Set :: Object,以便在插入对象时允许类型约束检查.到目前为止我的班级看起来像这样:
package My::Set::Object;
use strict;
use warnings;
use Moose;
use MooseX::NonMoose;
extends 'Set::Object';
has type => (is => 'ro', isa => 'Str', required => 1);
before [ qw(insert invert intersection union) ] => sub {
my ($self,$list) = @_;
for (@$list) {
confess "Only ",$self->type," objects are allowed " unless $_->does($self->type);
}
};
no Moose;
__PACKAGE__->meta->make_immutable;
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我执行以下示例对象构造时,似乎构造参数也传递给Set :: Object
my $set = My::Set::Object->new(type => 'Foo::Bar');
Run Code Online (Sandbox Code Playgroud)
打印出set的内容后,我发现"type"和"Foo :: Bar"是该组的成员.
我怎样才能解决这个问题?或者是否有更简单的方法可以做到这一点?