####### package Modulino::A; use strict; use Exporter qw(import); # buy() will be useful to others... our @EXPORT_OK = qw( buy ); __PACKAGE__->run(@ARGV) unless caller; sub run { my ($class, $arg) = (@_); $class->perform_modulino_specific_stuff; buy($arg); } sub perform_modulino_specific_stuff { my $class = shift; print "[special stuff for Modulino::As]\n"; } sub buy { print "[very useful purchasing algorithm to buy ", $_[0], "]\n"; } ####### #### package Modulino::B; use base qw( Modulino::A ); use strict; unless(caller) { no strict 'refs'; # "override" Modulino::A::buy with Modulino::B::buy... *{ "Modulino::A::buy" } = \&buy; # re-use Modulino::A::run... __PACKAGE__->run(@ARGV); } sub perform_modulino_specific_stuff { my $class = shift; print "[special stuff for Modulino::Bs]\n"; } sub buy { print "[alternative way to buy ", $_[0], "]\n" } ####### #### # Demonstrate use of Modulino::A's exported functions... $ perl -MModulinoA=buy -le 'buy("camels and onions")' #######