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.
In reply to Re: Accessing main::Constant
by bart
in thread Accessing main::Constant
by nagalenoj
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |