in reply to execute function with name passed as string parameter

& symbol in &one, &two is meant for calling subroutines. If your intention is not to call subroutines, but just assign subroutine names, then, use 'one', 'two' For calling subroutine, use &{$hash{$choice}}

perl -e '$choice='1'; %hash=( '0' => 'one', '1' => 'two');&{$hash{$choice}}; sub one {print "one"};sub two {print "two"}'