package Foo; our %callbacks = ( pig => sub { ... }, cat => sub { ... }, dog => sub { ... } ); while (...) { # do stuff $choice = ...; $callbacks{$choice}->(@args); } #### package main; use Foo; $Foo::callbacks{iguana} = sub { ... }; #### %Time ExclSec CumulS #Calls sec/call Csec/c Name 90.73 0.770 0.648 60783 0.0000 0.0000 Foo::__ANON__ #### package Foo; sub Foo::callbacks::pig { ... } # no more hash! sub Foo::callbacks::cat { ... } sub Foo::callbacks::dog { ... } while (...) { # do stuff $choice = ...; # of course, we also validate $choice no strict 'refs'; &{"Foo::callbacks::$choice"}(@args); # I feel so dirty! } package main; ## now extend Foo by doing this: use Foo; sub Foo::callbacks::iguana { ... }