Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: Accessing main::Constant

by bart (Canon)
on Dec 17, 2009 at 09:02 UTC ( #813158=note: print w/ replies, xml ) Need Help??


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:

  1. Mark up the print line so it's clear that you don't mean a filehandle. Unfortunately, this:

    sub pr { print +main::FO1; }
    still isn't enough.. (Why not? I really expected that this would work.)

    But even if it did work, that probably would still leave you with a prototype mismatch error

  2. 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.


Comment on Re: Accessing main::Constant
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://813158]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (4)
As of 2015-07-04 23:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (60 votes), past polls