NAME

LocalOverride - Transparently override subs with those in local module versions

VERSION

version 1.000

SYNOPSIS

use LocalOverride;

# Load Foo, followed by Local::Foo
use Foo;

Or

use LocalOverride ( base_namespace => 'MyApp', local_prefix => 'Custom' );

# Just load Moose, since it's not in MyApp::*
use Moose;

# Load MyApp::Base, followed by MyApp::Custom::Base
use MyApp::Base

DESCRIPTION

When this module is loaded and you use or require another module, it will automatically check for whether any local modules are present which override code from the module being loaded. By default, these override modules are placed in the file system at a location corresponding to Local::[original module name], however their code should be within the same package as the original module:

In /path/to/libs/Foo.pm:

package Foo;

sub bar { ... }
sub baz { ... }


In /path/to/libs/Local/Foo.pm:

package Foo;     # Not Local::Foo!

sub bar { ... }  # Replaces the original sub Foo::bar

This is, obviously, a very extreme approach and one which should be used only after due consideration, as it can create bugs which are very difficult to debug if not used carefully.

If warnings are enabled, this will generate warnings about any redefined subroutines. You will typically want to include

no warnings 'redefine';

in your override modules to prevent this.

CONFIGURATION

The following configuration settings can be used to enable/disable loading of local override modules or customize where they are located. They can be set either by including them as parameters to use LocalOverride or by setting $LocalOverride::[option].

Note that, because use is processed at compile-time, any changes made using the latter method must be made within a BEGIN block if they are intended to affect modules that you use. This is not necessary for modules you require, as require is processed within the normal flow of the program.

base_namespace

Default: ''

Local overrides will only be loaded for modules which fall within the base namespace. For example, if $base_namespace is set to 'Foo', then an override module will be loaded for Foo::Bar, but not for Bar or CGI.

If $base_namespace is set, overrides will be searched for within that namespace, such as Foo::Local::Bar (not Local::Foo::Bar) in the previous paragraph's example case.

The default setting, an empty string, will attempt to load local overrides for all modules. Setting $base_namespace is recommended in order to avoid this.

core_only

Default: 0

If this is set to a true value, then local override processing will be disabled.

This module can also be disabled with no LocalOverride if you prefer to unload it more completely.

local_prefix

Default: 'Local'

The local prefix defines the namespace (within $base_namespace) used for local override definitions.

AUTHOR

Dave Sherohman <dsheroh@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2010 by Lund University Library Head Office.

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