On Sun, Jan 13, 2002 at 10:04:58PM +0100, Mattia Barbon wrote:
> > $ bleadperl -MO=-qq,Deparse foo.plx
> > sub BEGIN {
> >     print "foo\n";
> > }
> > print "bar\n";
> > 
> > If B::Deparse can save BEGIN blocks, B::C can.
>
> I didn't mean that I can't write code to make B::C save BEGIN blocks
> ( it'd require <10 lines, probably ), I did mean that doing so would
> not be a god idea: _I am
> saving the state of the program after those blocks were ran_ and
> they will be run _another time_ at runtime, and this is not correct:
> ( for example use lib 'a'; would put 'a' into @INC twice, once
> ( correctly ) at compile time, and another time ( incorrectly ) at 
> runtime ). In this 
> case this is not harmful, but you get the idea.

I don't understand.  The compiled program should do exactly what the
original program did.  Anything else, as difficult as it may be, is a
bug.  Lots of programs and modules do important load-time checks and
logic inside BEGIN blocks.

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.


-- 

Michael G. Schwern   <[EMAIL PROTECTED]>    http://www.pobox.com/~schwern/
Perl Quality Assurance      <[EMAIL PROTECTED]>         Kwalitee Is Job One
Me? A robot? That's rediculous! For one thing, that doesn't compute at all!

Reply via email to