package Animal; use base qw(Class::Virtual); use strict; use warnings; sub new { my $class = shift; # hash reference my $self = shift; bless $self, $class; return $self; } __PACKAGE__->virtual_methods(qw(get_sound get_color)); 1; #### use strict; use warnings; use Animal::Dog; use Animal::Duck; my $dog = Animal::Dog->new( { name => 'Atila' } ); my $duck = Animal::Duck->new( { name => 'Donald' } ); print $dog->get_name(), ' says ', $dog->get_sound(), "\n"; my @missing = Animal::Duck->missing_methods(); warn 'Animal::Duck forgot to implement ' . join ', ', @missing if @missing; print $duck->get_name(), ' says ', $duck->get_sound(), "\n"; #### C:\>test.pl Atila says "bark bark!" Animal::Duck forgot to implement get_sound at C:\test.pl line 12. Animal::Duck forgot to implement get_sound() at C:\test.pl line 14