View on
MetaCPAN is shutting down
For details read Perl NOC. After June 25th this page will redirect to
Darin McBride > Module-Replace > Module::Replace



Annotate this POD

View/Report Bugs
Module Version: 0.02   Source  


Module::Replace - Replace functionality in other modules


Version 0.01


    use Module::Replace 'Other::Module' => qw(new);


The purpose of this module is to allow you to override functions in one module with the same-named functions in another.

This can be a global change, or a temporary change.

The reasons why you may want to do this include:


There are two types of usage: global and local replacement.

Global replacement

This is primarily targetted at frameworks. Here you call:

    use Module::Replace 'YourFramework::Type', qw(new);

from within the derived object. This will both call use base 'YourFramework::Type' and override new with your own. Note that access to the original new method is still available via SUPER_new, e.g.:

    sub new {
        my $class = shift;
        # allow re-derivations
        $class = __PACKAGE__ if $class eq 'YourFramework::Type';
        my $self = bless $class->SUPER_new(), $class;
        # ...
Local replacement

Sometimes you only want to replace a function for a little while. For example, changing the way that File::Spec::catdir works only when calling another function. Here you call the replace and restore functions directly.

    use Module::Replace;
    Module::Replace::replace('File::Spec', \'File::Spec::UNIX', qw(catdir));
    Module::Replace::restore('File::Spec', \'File::Spec::UNIX');

Note that if you leave off the reference to the source package, it will assume the caller package.

This will cause catdir to work UNIX-like on all platforms for the duration of Some::Other::function().

It is up to you to ensure that exceptions are handled so that the methods are restored at the proper time.




  1. Package to replace.
  2. Reference to package that contains the wanted function (optional - defaults to caller's package)
  3. List of functions to replace. Each function will be renamed to SUPER_$func so that the overridden function will work


  1. Package that is overridden
  2. Reference to package that contains the wanted function (optional - defaults to caller's package)


Darin McBride, <dmcbride at>


Please report any bugs or feature requests to bug-module-replace at, or through the web interface at I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.


You can find documentation for this module with the perldoc command.

    perldoc Module::Replace

You can also look for information at:



Copyright 2008 Darin McBride, all rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

syntax highlighting: