my %message_types = ( type1 => sub { $object->sub_1(@_); }, type2 => sub { $object->sub_2(@_); }, type3 => 'sub_3', type4 => 'sub_4', type5 => \&bla, type6 => \&Foo::bar, ); $func = $message_types{$type}; if (ref($func)) { # It's a function. $func->(@args); } else { # It's a method. $self->$func(@args); }