in reply to Re: MyModule::BEGIN calls
in thread MyModule::BEGIN calls

Thank you for your response.

Many of the MyModule::BEGIN come directly before a constant::import or Exporter::import or some other *::import. It is because the module (which I did not write) uses many, many constants in its implementation that it has to be re-parsed? I am, of course, assuming that A BEGIN involves some kind of reparse, during the compile-execute loop.

No, do not "create" BEGINs inside an eval. But I do have a "use" in inside of one eval. I understand that a use is a BEGIN but I was sure to not to have any variables and to use the eval { }; not the eval " "; form.

--habit

Replies are listed 'Best First'.
Re: Re: Re: MyModule::BEGIN calls
by duff (Parson) on Dec 08, 2003 at 20:20 UTC

    There's not a reparse, but a single parse. While perl is parsing your source file, as soon as it finishes parsing a BEGIN routine, it executes it immediately before continuing to parse the rest of the code.

    the module ... uses many, many constants in its implementation

    Sounds like you could take advantage of use constant, see constant.

    Count how many BEGIN routines you have in your source. I bet it's ~74. If your program really is spending 20% of its run time executing those BEGIN routines, then you need to decide if that's an important 20% or not. :-) If it is, then maybe you could gain some advantage by coelescing the BEGIN routines or converting them to some other form