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


in reply to Re^2: How to grab Parse::RecDescent error output in a variable?
in thread How to grab Parse::RecDescent error output in a variable?

Regardless of what the documentation says about use being equivalent to require Module; import Module;, this example shows that it is not the case this time.

Not true. The documentation doesn't say that. Both the documentation and I said use Module; is equivalent to

BEGIN { require Module; import Module; }

And that is clearly the case this time.

Besides that, your re-open of ERROR requires knowledge of the package internals

So does knowing STDERR is duped at execution time. Besides, the benefits far outweigh the drawbacks. Well, if it had worked.

Benefits
  • Works with scalar handles.
  • Much cleaner code in the caller.
  • In fact, one can arrange to have no extra code in the caller since it can be placed in the "grammar".
  • Works even if use Parse::RecDescent; is executed twice.
  • Works with threads.
Drawbacks
  • Minor reliance on stable PRD guts.
  • Doesn't work. Oops!

Clearly format has a side-effect that prevents the use of the nice solution this time.

Ah dang! You could issue the format on the new handle, but that's going pretty far into the inards.