1
私の質問は次のとおりです:perl Mooを使ってオブジェクトを作成するnew()メソッドを呼び出すときにサブルーチンを使って配列を作成します。次の例を参照してください。perlを使ってnew()メソッドでサブルーチンを使うMoo
package Customer;
use DBI;
use 5.010;
use Data::Dumper;
use Moo;
use FindBin qw/$Bin/;
use lib "$Bin/../../../lib";
use lib '/home/fm/lib';
use TT::SQL;
has id => (
is=>'ro',
required=>1,
);
has type => (
is=>'ro',
);
has emails => (
is=>'rw',
isa => sub {getEmails() },
);
sub getEmails
{
#connecting into de DB
my $self=shift;
my $db2 = TT::SQL::get_handler("xxxxxx","xxxxx");
my $fmuser=$self->id;
my $type=$self->type;
my $query;
#checking the customer type to perform the query
if ($type eq "xxxxxxxxxx")
{
$query=xxxxxxxxxxxxxx;
}
else
{
$query=xxxxxxxxxxxxxx;
}
my $ref = $db2->execute($query,$fmuser);
my @emails;
#retrieving emails
while (my $row = $ref->fetchrow_hashref ) {
@emails=(@emails,"$row->{email}\n");
}
return @emails;
}
1;
基本的に、私は、データベースから、いくつかの電子メールを取得しようとしている、と私は次のコマンドを実行したときので、クエリやDBアクセスを心配しないでください:
my $cc= Customer->new(id=>92,type=>'xxxxxxx');
@emails=$cc->getEmails();
結果を中@電子メールが期待されます。しかし、ときに私が実行します。
my $cc= Customer->new(id=>92,type=>'xxxxxxx');
@emails=$cc->emails;
私も結果を持っていません。
私はこの質問に答えると非常に感謝します。先輩に感謝します。
'getEmails'は' type'に依存しているため、この場合 'lazy'を' 1'に設定しなければなりません:docs:*デフォルトでnew()中に起動された場合、あなたはその存在に頼るべきではないので、まだ人口になっています*)。さらに、 'builder'パラメータは、中間体を使用する代わりに直接' getEmails'に設定することができます。 – polettix
あなたは最高の男です!私はあなたの答えのおかげで問題を解決しました。私はそれを多く感謝します。 – ccalderon911217
@ ccalderon911217あなたは上記のチェックマークをクリックして回答を受け入れることができます。これにより、この問題を抱えている将来のユーザーにはこれがあなたの問題を解決したことが分かります –