our $properties = { time => undef, trad_ref => undef, adr_buyer_bank => 'test', adr_seller_bank => undef, seller_pays => undef, }; sub new { my $class = shift; my $self = {}; map { $self->{$_} = $properties->{$_} } keys %$properties; bless $self, $class; $self->_init(@_); return $self; } sub _init { my $self = shift; if(@_) { my %args = @_; map { $self->{$_} = $args{$_} if exists $self->{$_} } keys %args; } $self->{__dbh} = DBI->connection(...) unless defined $self->{__dbh}; } sub load { my $self = shift; my $sql = "SELECT * FROM tickets WHERE id = ?"; my $sth = $dbh->prepare($sql) or die $dbh->errstr; $sth->execute($ticket_number); my $row = $sth->fetchrow_hashref; $self->_init(%$row); return 1; } #### my $ticket = MyApp::Ticket->new(); #### my $ticket = MyApp::Ticket->new(time => time(), trad_ref => 34567, adr_buyer_bank => 'blah', adr_seller_bank => 'blah, seller_pays => 99.99); #### my $ticket = MyApp::Ticket->new(); my $res = $ticket->load(12345);