sub quack(RubberDuck $self) { ... } sub quack(Mallard $self) { ... } #### package RubberDuck; sub new { bless {}, shift } sub make_noise { print "Plug yer ears!\n"; $_[0]->quack(); } sub quack { print "Squeak!\n" } sub DESTROY { print "RubberDuck goes back in the toybox.\n" } package Mallard; our @ISA = qw(RubberDuck); sub new { bless {}, shift } sub quack { print "Quack!\n" } sub DESTROY { print "Mallard flies away.\n" } package main; for my $duck_class (qw( RubberDuck Mallard )) { my $duck = $duck_class->new(); $duck->make_noise(); }