$ perl -E' sub IO::Handle::myprint { say "..."; } sub myprint { myprint STDOUT @_ } myprint STDOUT "foo"; myprint "foo"; eval q{ myprint(STDOUT "foo"); 1 } or warn $@; eval q{ myprint(\*STDOUT "foo"); 1 } or warn $@; eval q{ myprint { STDOUT } "foo"; 1 } or warn $@; eval q{ myprint { \*STDOUT } "foo"; 1 } or warn $@; ' syntax error at (eval 1) line 1, near "STDOUT "foo"" syntax error at (eval 2) line 1, near "*STDOUT "foo"" syntax error at (eval 3) line 1, near "} "foo"" syntax error at (eval 4) line 1, near "} "foo""