http://www.perlmonks.org?node_id=83215


in reply to Preventing BEGIN blocks from being run in the debugger?

You best bet may actually be to have your own begin block that copies STDOUT to another handle, and then close the normal STDOUT. You can then print to your special STDOUT handle and none of the other begin blocks will have a chance (I hope?) to mess up your output.

correct me if i'm wrong....this is a stab in the dark...

  • Comment on Re: Preventing BEGIN blocks from being run in the debugger?

Replies are listed 'Best First'.
(bbfu) (output/side-effects) Re(2): Preventing BEGIN blocks from being run in the debugger?
by bbfu (Curate) on May 25, 2001 at 07:37 UTC

    That would probably work for the output, though bikeNomad mentioned that he could just use another filehandle for the output. It wouldn't, however, work for the side-effects, which I gathered to be the greater of the two problems.

    Unfortunately, I don't think that there's any way to stop the BEGIN blocks running, short of pre-parsing the file, inserting return() calls as the first instruction in the BEGIN block before loading the modified code into the debugger. Of course, that means that you have to try to parse Perl code yourself, which defeats the original purpose. *shrug* And, of course, that doesn't even come close to handling things like use.

    But, honestly, for the code to be parsed correctly at all, some compile-time execution is probably unavoidable. Otherwise you wouldn't get your import's set up correctly and all that. Perhaps all one can do is hide any output from the compile-time code and hope for the best. *sigh* Maybe this kind of thing will get easier when Perl 6 comes around.

    bbfu
    Seasons don't fear The Reaper.
    Nor do the wind, the sun, and the rain.
    We can be like they are.