Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re: Accessing main::Constant

by bart (Canon)
on Dec 17, 2009 at 09:02 UTC ( [id://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.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (8)
As of 2024-04-25 11:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found