sub mysub { print "mysub $_[0]\n"; }; my $s="mysub"; &{$s}( "toto"); # This is what you want #### my %h=( mysub1 => \&mysub_1, # \&mysub_1 is a reference to the subroutine mysub2 => \&my_sub_2); my $s="mysub1"; # or however you get the string if( $h{$s}) { $h{$s}->( "toto"); } # this is how you call the subroutine with its arguments else { die "wrong sub called: $s"; } sub mysub_1 { print "mysub 1 $_[0]\n"; }; sub mysub_2 { print "mysub 2 $_[0]\n"; };