-1

たとえば、起動時に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? 
 }
4

2 に答える 2

1

DBI クラスのサブクラス化は簡単ではありません。ドキュメンテーションを読んでください別の方法として、プロキシ オブジェクトを宣言し、ラップされたオブジェクトをAUTOLOADを使用して呼び出すこともできます。

于 2013-04-23T21:14:53.193 に答える
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(...);
于 2013-04-24T03:15:33.117 に答える