On Mon, Jan 14, 2002 at 11:13:27AM +0100, Rafael Garcia-Suarez wrote:
> On 2002.01.13 22:25 Michael G Schwern wrote:
> > Why would this:
> > 
> >     BEGIN {
> >         push @INC, 'foo';
> >     }
> > 
> > put 'foo' into @INC twice if it were compiled?  The compiled program
> > should not be storing the post-BEGIN value of @INC, it should store
> > the original value at startup.
> 
> The compilation occurs at CHECK-time, that is, after 'foo' has been pushed
> into @INC.

I don't know if this is true, but it isn't relevent.  Remember, BEGIN,
INIT, CHECK, etc... time is only relevent to the current module being
loaded/run.  As this example shows, Bar.pm's code is run before even
Foo.pm's BEGIN block.  Replace -MBar with -MO=C and you get the idea.

# ~/tmp/Foo.pm
package Foo;

BEGIN {
    push @INC, 'foo';
}

print "\@INC as Foo has modified it\n";
print join "\n", @INC;

# ~/tmp/Bar.pm
package Bar;

print "\@INC as Bar sees it\n";
print join "\n", @INC;

$ bleadperl -I/home/schwern/tmp -MBar -wle 'use Foo'
@INC as Bar sees it

/home/schwern/tmp
/usr/local/bleadperl/lib/5.7.2/ppc-linux-64int
/usr/local/bleadperl/lib/5.7.2
/usr/local/bleadperl/lib/site_perl/5.7.2/ppc-linux-64int
/usr/local/bleadperl/lib/site_perl/5.7.2
/usr/local/bleadperl/lib/site_perl
..
@INC as Foo has modified it

/home/schwern/tmp
/usr/local/bleadperl/lib/5.7.2/ppc-linux-64int
/usr/local/bleadperl/lib/5.7.2
/usr/local/bleadperl/lib/site_perl/5.7.2/ppc-linux-64int
/usr/local/bleadperl/lib/site_perl/5.7.2
/usr/local/bleadperl/lib/site_perl
..
foo



-- 

Michael G. Schwern   <[EMAIL PROTECTED]>    http://www.pobox.com/~schwern/
Perl Quality Assurance      <[EMAIL PROTECTED]>         Kwalitee Is Job One
We're talkin' to you, weaselnuts.
        http://www.goats.com/archive/000831.html

Reply via email to