in reply to die on file open

You should be looking at operator precedence.

open $fh, '<', $qfn || die "...";

means

open($fh, '<', ($qfn || die("...")));

You want

open($fh, '<', $qfn) || die "..."; open($fh, '<', $qfn) or die "..."; open $fh, '<', $qfn or die "...";

In general, one uses "or" when followed by die, return, next, last or similar, and one uses "||" the rest of the time.