2013-04-23 23 views
-1

例如,我想在啓動時存儲一個dbi連接的數據,所以我不必通過一個對象來初始化它,是他們在同一個包中執行此操作的一種方法嗎?有沒有辦法使用__PACKAGE __->在同一模塊中設置繼承?

初始化通過我的對象是:

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? 
} 

回答

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(...); 
+0

這是怎麼回事? – hwnd 2013-04-24 14:42:11

+0

* this *是什麼? – stevenl 2013-04-25 02:39:05

相關問題