Puts the contents of $bar on the filehandle FOO. We're all clear on that.print FOO $bar;
Does exactly the same thing in a nicely Perl 4-ish way. Perl's parser knows that the first argument to print (regardless of the parens) might be a filehandle which won't be comma-separated from the first thing to be printed. Now:print(FOO $bar);
Falls into the same trap. You're just specifying the package that the filehandle is in. The solutions:print(Package::FOO $bar);
The + tells the parser that the parens don't go with the print (and therefore the Package::FOO) and they're just grouping. So the parser isn't looking for a filehandle anymore. The Package::FOO gets used with indirect object syntax.print +(Package::FOO $bar);
The parser doesn't see a first-argument space-separated from the things to be printed and knows that Package::Foo is Something Else. (Later it'll know it's a function call.)print(Package::FOO($bar));
Same goes here, the parser doesn't see a filehandle here and knows that it shouldn't go looking here for one.print(&Package::FOO $bar);
I hope that helps. More importantly I hope my lack-of-sleep answer didn't cause more questions than answered...
In reply to Re: Re: (jeffa) Re: 'print' puzzle
by clintp
in thread 'print' puzzle
by John M. Dlugosz
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |