> On Sun, Jan 13, 2002 at 07:39:52PM +0100, Mattia Barbon wrote: > > > perlcc seems to be dropping BEGIN blocks entirely, that's the problem. > > > > No, that's correct. Explanation: if I have a module Foo > > ---- > > package Foo; > > > > $x = 1; > > print "AAA"; > > > > sub a { $x } > > > > 1; > > ---- > > and a main program foo.pl > > ---- > > BEGIN { # think use Foo;, expanded for clarity > > require Foo; > > } > > > > print Foo::a(); > > ---- > > perl -MO=C foo.pl > > calls B::C::compile _after_ it ran the BEGIN blocks; this means that the > > optree in Foo that initializes $x, and does "print AAA" has already been > > freed. So, even if B::C could save BEGIN blocks, this is not a good > > idea, for quite a lot of reasons. I didn't write what I meant, sorry, see below
> $ 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. Regards Mattia