great.
I had looked at the $| option and had declared it equal to 1 at the beginning of the script, but it didn't do anything (perhaps because I was using select to change the default output before printing?).
What finally worked was adding the $| = 1 between the selects. So, I went from this:
# Change the output to logfile
$filehandle = select LOG_FILENAME;
eval $menu[$var];
# Restore the filehandle
select $filehandle;
to this:
# Change the output to logfile
$filehandle = select LOG_FILENAME;
$| = 1;
eval $menu[$var];
# Restore the filehandle
select $filehandle;
Many thanks to all.