Yes, there are multiple ways to get that statement to work. You could also use parentheses, do your logic beforehand and put it in a variable, or write the code in countless other ways.
But it still proves that in some cases even the compiler can't tell whether there is a filehandle (ok, ok, a variable containing a filehandle reference) or an ordinary variable at the start of a print statement.
This may be a single contrived example (though it is nothing unusual really), but the set of cases in which the statement will not be clear to the human eye is much larger.
When's the last time you used duct tape on a duct? --Larry Wall