Hello,
I'm having a problem getting a builder to run in a subclass. Whenever I try and run a script that calls
$obj->{'manual_phone'} it comes back undefined and I'm not sure why. I thought this was supposed to be built when the accessor was called.
Anyways, here's what I have.
package Transaction;
use Moose;
use MyDB::Merchid;
use Win32;
has 'transaction_type' => (
is => 'rw',
isa => 'Str',
required => 1,
);
has merch_info => (
is => 'ro',
isa => 'Any',
builder => '_build_merch_info',
);
sub _build_merch_info {
my $self = shift;
my $snum = substr(Win32::NodeName, 5);
return MyDB::Merchid->retrieve($snum);
}
1;
package MyDB;
use strict;
use warnings;
use base 'Class::DBI';
MyDB->connection('dbi:ODBC:mydbsqldsn') || die "Couldn't connect to da
+tabase: " . $DBI::errstr . "\n";
1;
package Transaction::CC;
use Moose;
extends(qw/Transaction/);
has 'manual_phone' => (
is => 'ro',
isa => 'Str',
lazy_build => 1,
);
sub _build_manual_phone {
my $self = shift;
if (! defined $self->{merch_info}) {
die "ERROR: merch_info not defined\n";
}
return $self->{merch_info}->MANUAL_NUMBER;
}
1;
package MyDB::Merchid;
use strict;
use warnings;
use base 'MyDB';
MyDB::Merchid->table('MERCHID');
MyDB::Merchid->columns(All => qw/
COMPANY_NUMBER
MERCHID_SIC_CODE
MERCHID_QUAL_CODE
MANUAL_NUMBER
/);
1;
A snippet from the script:
my $obj = Transaction::CC->new(
'transaction_type' => 'Visa',
);
print "\$obj->{'manual_phone'}: " . $obj->{'manual_phone'} . "\n";