While I'm glad you've answered your own question, I have to admit that I'm confused by it. I would expect that the "set"s and the "status" are commands that lsnrctl should receive, and not be separate commands. In that case, I would have expected that they needed to be sent to lsnrctl's STDIN. The easiest way to do that would be:
system(<<EOF) and die "couldn't run listener control: $?";
echo "set password 'oracle'
set current_listener 'LISTENER'
status" | lsnrctl
EOF
though that's definitely not the most perlish (and probably won't quite work as-is on Windows). Something more like:
open my $fh, "|-", "lsnrctl" or die "can't run listener control: $?";
print $fh <<EOF;
set password 'oracle'
set current_listener 'LISTENER'
status
EOF
close $fh;
is probably closer, and far more perlish.