in reply to Re: Overriding a module that is used by a program I'm testing
in thread Overriding a module that is used by a program I'm testing

I like this solution. I needed to do something similar today as it happens. I wanted to replace only certain methods, so I put a copy of the CPAN module in a Replacement subdirectory, complete with its parent directory, amended it and:
use library '/home/simon/lib/Replacement'; use Replacement::Some::Module; ...

One world, one people

Replies are listed 'Best First'.
Re^3: Overriding a module that is used by a program I'm testing
by dsheroh (Monsignor) on Dec 09, 2010 at 09:06 UTC
    I needed to do something similar myself about a month ago, too... The result was LocalOverride, which hooks into the require mechanism (by putting a coderef into @INC, as cdarke suggested above) to accomplish what you've described transparently. With the default configuration, LocalOverride would cause
    use Some::Module;
    to more-or-less turn into
    use Some::Module; use Local::Some::Module;
    ("More-or-less" because Some::Module::import runs only after both versions are loaded, not once after the base module loads and again after the local modifications load.)

    Also note that, with this technique, you don't need to use a complete copy of the base module as a baseline. So long as you load both Some::Module and then Replacement::Some::Module, you only need to include changed subs in Replacement::Some::Module.