package class_X; require DBI; @ISA = qw( DBI ); sub new { my( $class, $dns, $username, $password ) = @_; my %attr = ( PrintError => 1, RaiseError => 0, AutoCommit => 1 ); my $self = DBI->connect( $dns, $username, $password, \%attr ) or return; push @ISA, ref $self if( not grep { $_ eq ref $self } @ISA ); return bless $self, $class; } sub DESTROY { my( $self ) = @_; $self->disconnect; } 1; package class_Y; require class_X; @ISA = qw( class_X ); sub new { my( $class ) = @_; my $dns = "DBI:mysql:database=XXX"; my $user = "XXX"; my $pwd = "XXX"; my $self = class_X->new( $dns, $user, $pwd ); return bless $self, $class; } sub DESTROY { my( $self ) = @_; $self->disconnect; } 1;