The Perl print function, which has a long history
and a tricky syntax,
takes an optional file handle as its first argument.
Without the optional first file handle argument, it prints
to the default output handle (typically STDOUT).
Moreover, it has a special syntax where its first
and second arguments
are separated not by a comma (like most Perl functions) but by a space!
And because your first argument to print is more complex
than a plain scalar variable, you need to specify it
in a bare block, for, erm, historical reasons.
Note that this special block syntax to print is clearly documented:

If you're storing handles in an array or hash, or in general whenever
you're using any expression more complex than a bareword handle or a
plain, unsubscripted scalar variable to retrieve it, you will have to
use a block returning the filehandle value instead

However, you then made the (perfectly understandable) "mistake" of
assuming that this special print syntax applies to other Perl
functions, such as close.
When calling most Perl functions, you should not place
the first function argument in a block; this is a one-off
special case for the print function.