my %functions = ( default => \&write_default, warning => \&write_warning, confirm => \&write_confirm, commit => \&write_commit ); #### # This is outside of main, in the 'global' block my %function = ( # see above ); # The rest is inside of main $action = ( $function{ $action } ) ? $action : 'default'; # you could also have an 'invalid' block here for an invalid # parameter &$function{ $action } ( $script_loc, $email, $name, $warning_msg );