The recourse to a temp variable or readline is really unavoidable as explained by this piece of perlop:
If what's within the angle brackets is neither a filehandle nor a simple
scalar variable containing a filehandle name, typeglob, or typeglob
reference, it is interpreted as a filename pattern to be globbed, and
either a list of filenames or the next filename in the list is returned,
depending on context. This distinction is determined on syntactic
grounds alone. That means <$x> is always a readline() from
an indirect handle, but <$hash{key}> is always a glob().
That's because $x is a simple scalar variable, but $hash{key} is
not--it's a hash element. Even <$x > (note the extra space)
is treated as glob("$x "), not readline($x).