in reply to How do I localize a value to the calling function's scope?

You can do that with local:

sub test_foo { no warnings 'redefine'; local *Module::bar = \&stub_for_bar; # test code for Module::foo goes here }
You have that in your list, but it's no more typing than your function call, and it does what you want. Wherever foo calls bar, the stub is called.

Lexical warnings.pm saves a lot of trouble.

After Compline,
Zaxo

Replies are listed 'Best First'.
Re^2: How do I localize a value to the calling function's scope?
by Ytrew (Pilgrim) on Oct 15, 2004 at 18:29 UTC
    Thanks, that certainly helps.

    But I'd still prefer a single subroutine call for documentation purposes. I can then document the perl idiom used to redefine a subroutine, explain how it works, and what it's supposed to do, right in the perldoc, all in one place.

    Using a non-obvious idiom repeatedly throughout my tests may well confuse a junior programmer assigned to maintain it. Redundantly documenting the idiom wastes space and time. Documenting the idiom in a overview section at the start of the test script is probably what I'll end up doing, but I was trying to avoid it.

    On the other hand, just using local and typeglobs to override seems like the simplest workable solution right now.

    Oh, well... as the Rolling Stones said, "you can't always get what you want" (even with Perl). *sigh*

    -- Ytrew Q. Uiop