in reply to __END__ without __BEGIN__?
The compiler would have to forget everything it did in the BEGIN block, and if there were side effects (for example, writing to files), all of that would have to be undone.BEGIN { my $var = do_some_processing(); } __BEGIN__ # start of real processing.. but the compiler has already processed th +e BEGIN block! # ..real code here..
I suppose your hypothetical __BEGIN__ tag could cause the compiler to simply ignore everything until such a tag is seen.. but what if the tag doesn't exist? the compiler would have to either re-read the file (breaking STDIN, as per merlyn's comment Re: __END__ without __BEGIN__? above), or would have to store a potentially enormous file (plus dependencies) in memory before compilation could truly begin*. This issue doesn't exist with __END__ because the compiler can fall off the end of the file and thus not need to see an __END__ tag.
Of course this could all be complete hooey. Larry may have just left out __BEGIN__ because to include it would be extra work ;)
* - It might do this already, but without the __BEGIN__ tag compilation can begin as soon as perl figures out it has something to work with, which is at least potentially faster.
Update: changed 'more unstable' to 'less stable' - did not mean to imply the compiler was already unstable ;)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: __END__ without __BEGIN__?
by Anonymous Monk on Mar 30, 2005 at 12:12 UTC | |
by moot (Chaplain) on Mar 30, 2005 at 14:23 UTC |