package bar; # base class. Has a description method and an id method sub new { my $proto = shift; my $class = ref($proto) || $proto; my $self = {}; $self->{DESCRIPTION} = "Bar!!!"; bless($self,$class); return $self; } sub description { my $self = shift; return $self->{DESCRIPTION}; } # return a description sub id { return __PACKAGE__; } # return the package name package foo; # inheriting from bar package, not overriding the id method. @ISA = qw(bar); use bar; sub new { my $proto = shift; my $class = ref($proto) || $proto; my $self = $class->SUPER::new; $self->{DESCRIPTION} = "Foo!!"; # yes I'm lazy :) bless($self,$class); return $self; } package main; use foo; $foo = new foo; print "Description is ",$foo->description,"\n"; print "Package is ",$foo->id,"\n";