package TestModule; require DBI; use AutoLoader; use base 'Class::Base'; sub AUTOLOAD { my $op = $AUTOLOAD; $op =~ s/^.*:://; if ( DBI::db->can($op) ) { eval "sub $op { my \$self=shift; $self->{DBH}->$op(\@_); }"; } else { eval "sub $op { return shift->error('Cannot autoload $op'); }"; } } sub new { # new ( $dsn[, $user[, $pass]] ) my $self = shift; return undef unless @_; my @args = @_; my $obj = {}; eval { $obj->{DBH} = DBI->connect(@args); }; if ($@) { return $self->error("Unable to connect to DB: $@"); } bless $obj, $self; }