On Tue, Jan 15, 2002 at 08:51:06AM +0000, Piers Cawley wrote: > > I don't understand. Why do we have to deal with them? Just translate > > the Perl code in the BEGIN block to C <hand wave>, dump it and make > > sure it gets run first. Right? > > > > I think I'm missing something very vital here. > > Let's see if I can come up with a simple counterexample that will show > up the problem. > > #!perl > my($compile_time, $start_time); > BEGIN {$compile_time .= localtime(time)} > > # Later: > > print "Compiled at $compile_time\n"; > print "Started at $start_time\n"; > > ... > > BEGIN {$start_time .= localtime(time)} > __END__ > > How do you intend to distinguish between those two BEGIN blocks, one > of which must be run at script compile time, the other of which must > be run at (for want of a better description) INIT time? And neither of > which can be run twice (hence the .=).
Wouldn't both of those BEGIN blocks be run at compile-time? The only ordering I'd see is that the first one declared (ie. $compile_time) is run before the second (ie. $start_time). > The only thing that can make that distinction is a human being. The > compiler can probably guess that the two blocks should only be run > once Guess? Its a BEGIN block, it gets run once! Ok, there's some really fundemental breakdown of understanding here, and I think its me. Let's step back a second. Why is anything guessing when and how many times BEGIN blocks are run? Is B::C literally dumping out the total state of the interpreter after compile-time, variables and everything?! -- Michael G. Schwern <[EMAIL PROTECTED]> http://www.pobox.com/~schwern/ Perl Quality Assurance <[EMAIL PROTECTED]> Kwalitee Is Job One Paste is a waste if you're chaste, but in this case dump a load of goo and poo by the case in your face, and place in your jawls like a juicy chaw, but don't spit that shit and enjoy it all. -- Ubergirl's beau