http://www.perlmonks.org?node_id=812976


in reply to Re: Accessing main::Constant
in thread Accessing main::Constant

Thanks. It works fine.

I need another clarification, Is it possible to access a variable in main package like below,

package pq; . use constant { VAR => "main::$VAR" }; . . sub pr { print main::$VAR; print VAR; }

I'm getting error. So I thought, 'As the constants are expanded when compilation, it isn't working as what I expected'. $VAR is a our variable in main package.

Replies are listed 'Best First'.
Re^3: Accessing main::Constant
by BrowserUk (Patriarch) on Dec 16, 2009 at 06:07 UTC

    Firstly, the syntax would be $main::VAR

    Secondly, the value of variables in main are not set until after the uses at the top of the code, so you would get undef. You could address that by setting the $VAR in a BEGIN block:

    ... BEGIN{ our $VAR = 'fred'; } use pg; ...

    But the question is why would you want to do that?


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      I've a similar scenario to be addressed,

      I've a hash in the pl file, which I need access it from a module. when Instead of using like $main::VAR->{a}->{b} everytime, Instead I wanted to make it($main:VAR) as a constant and When I need to do that operation, I will be calling it like CONSTANT->{a}->{b}.

      Am I doing it right?!
        What is the benefit in declaring a constant that contains a reference to a data structure? It doesn't make the child elements readonly...

        Also, I avoid use constant wherever possible and use Readonly instead. In my opinion its far more flexible...
Re^3: Accessing main::Constant
by ikegami (Patriarch) on Dec 17, 2009 at 16:03 UTC
    $main::VAR is the appropriate syntax.

    ( Woops, this was said in an earlier reply. I had missed it )