in reply to Using File Handle in hash

That usage of <> is a shorthand for readline. If you switch to readline it still adds to the defined check and the assignment to $_.
$ perl -MO=Deparse -e'while (<$fh>) {}' while (defined($_ = <$fh>)) { (); } -e syntax OK $ perl -MO=Deparse -e'while (readline($fh)) {}' while (defined($_ = <$fh>)) { (); } -e syntax OK