例如,我想在启动时存储dbi连接的数据,因此我不必通过对象初始化它,是否可以在同一个包中执行此操作?
通过我的对象初始化将是:
my $obj = foo->new;
my $dbh = $obj->connect('dbi', 'user', 'pw');
但是我想在启动时将它存储到我可以使用的地方
my $obj = foo->new;
my $blah = $obj->selectall_arrayref(...);
package foo;
use strict;
use warnings;
__PACKAGE__->connect('dbi', 'user', 'pw');
sub new {
my $class = shift;
my $self = {};
bless ($self, $class);
return $self;
}
sub connect {
my $class = shift;
my $self = ref $class || $class;
return $self->(@_); # Is this possible?
}
答案 0 :(得分:1)
子类DBI类不是很简单,只是read the documentation。 其他方式可能是声明proxy object,并在AUTOLOAD的帮助下调用包装对象。
答案 1 :(得分:1)
使用代理对象的另一种方法是简单地将DBI编写到您的类中。
package foo;
use DBI;
sub new {
my $class = shift;
my $self = {DBH => DBI->connect(@_)};
bless ($self, $class);
return $self;
}
# defer method call to DBH
sub selectall_arrayref {shift->{DBH}->selectall_arrayref(@_)}
package main;
my $obj = foo->new('dbi:...', 'user', 'password');
my $blah = $obj->selectall_arrayref(...);