use warnings; use strict; sub unpack_a { print "a(@_)\n"; 11 } sub unpack_b { print "b(@_)\n"; 22 } my $RECORD_SEQ_ID = 'a'; local $_ = 0; my @lines = 42; my $res = do { no strict 'refs'; &{"unpack_$RECORD_SEQ_ID"} ($lines[$_]) }; print $res;