in reply to MyModule::BEGIN calls

Normally BEGIN routines are called immediately after they are parsed and then discarded. Do you have 74 BEGIN routines? Do you create BEGIN routines in your program with eval?

Are you sure you're reading your profile data correctly?

Replies are listed 'Best First'.
Re: Re: MyModule::BEGIN calls
by habit_forming (Monk) on Dec 08, 2003 at 19:43 UTC
    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

      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