Make sure that when you say "context", you're not thinking "scalar" and "list" context. Those don't apply here. Read on...
print FOO $bar;
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(Package::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.
I hope that helps. More importantly I hope my lack-of-sleep answer didn't cause more questions than answered...
|