package atm; my %code = ( var1 => sub { print 1 }, var2 => sub { print 2 }, # ... varN => sub { print N }, ); package main; if ( exists $atm::code{$varN} ) { $atm::code{$varN}->( object_vars($var1) ); } else { # no matching sub } #### if ( my $sub = atm->can($varN) ) { $sub->( object_vars($varN) ); } else { # no matching sub }