in reply to Accessing main::Constant
The reason for your error is because the snippet
sub pr { print main::FO1; }
is compiled before the the snippet
use constant { FO1 => "value" };
(BTW braces for constant?? Weird.)
so perl has to apply some heuristics while parsing the former code. An all uppercase bareword ("FO1") as a first parameter to print, makes perl assume it's a filehandle.
So what you must do is one of the following:
Mark up the print line so it's clear that you don't mean a filehandle. Unfortunately, this:
still isn't enough.. (Why not? I really expected that this would work.)sub pr { print +main::FO1; }
But even if it did work, that probably would still leave you with a prototype mismatch error
compile the constant definition for before you use pq;
BTW It's considered best practice to start package (and module) names with an uppercase letter.
Seeing the trouble with the former attempt at a solution, the latter definitely looks like the best option.
|
|---|