use Carp qw(croak); sub call_service { my $svc = shift; my $cmd = shift; my @args = @_; my $name = "$svc\::$cmd"; my $handler = *{$name}{CODE}; croak "Couldn't find a handler for $name" unless $handler; # maybe log the invocation to your logfile? return $handler->(@args); } #### my $handler = \*{$name}{CODE};