use strict; my %dispatch = ( foo => [\&foo,qw(5 * 4)], bar => [\&bar,'HELLO'], ); for (keys %dispatch) { my ($sub,@args) = @{$dispatch{$_}}; print $sub->(@args),"\n"; } sub foo { my ($n1,$op,$n2) = @_; return eval "$n1 $op $n2"; } sub bar { return ucfirst lc shift; }