What Perl version and system?
Just verified: With an old perl-5.8 I get the different behavior with/without the variable, with perl-5.10 it hangs regardless. It's reproducable (on 5.8) with variables that hold regular expressions, not with variables that hold scalars. Really weird, probably an old bug that got fixed in 5.10.
The "bug" is that file handles aren't closed during global destruction — Perl let's the system do it — so cat is left running, ignored.
Nice, that explains your examples well, but what is the reason that
open FH , "| cat " or die ;
open STDOUT, ">&FH"or die ;
hangs while
open FH , "| cat " or die ;
doesn't?