http://qs321.pair.com?node_id=59959


in reply to Re: Returning information from BEGIN
in thread Returning information from BEGIN

Thanks! Yep, that was exactly what the problem was ... the "my"
Which explains why this worked:

BEGIN {$foo="hiya"}; print $foo."\n";

Okay, feeling a bit silly, I thank you both and will continue
writing this program after I drank a whole lotta coffee ;-)

Bye, Leon

Replies are listed 'Best First'.
(tye)Re: Returning information from BEGIN
by tye (Sage) on Feb 22, 2001 at 00:21 UTC

    Note that there is no problem with:

    my $Err; BEGIN { $Err= defined $ENV{SM} }

    Sure, the BEGIN happens at compile time but so does the declaration part of the my code. use strict didn't give you an error, did it? That is because $Err is getting declared at compile time before the BEGIN block is executed.

    What would be a "problem" is code like this:

    my $Err= 0; BEGIN { $Err= 1 if ! $ENV{SM} }
    because the my statement gets executed in two parts. The declaration part gets executed at compile time while the initialization part gets executed at run time. So the order or execution ends up looking more like this:
    my $Err; $Err= 1 if ! $ENV{SM}; $Err= 0;
    O-:

    Personally I prefer the my solution to using use vars inside the BEGIN block.

            - tye (but my friends call me "Tye")