NAME

relative - Load modules with relative names

VERSION

Version 0.02

SYNOPSIS

package BigApp::Report;

use relative qw(Create Publish);
# loads BigApp::Report::Create, BigApp::Report::Publish

use relative qw(..::Utils);
# loads BigApp::Utils

use relative -to => "Enterprise::Framework" => qw(Base Factory);
# loads Enterprise::Framework::Base, Enterprise::Framework::Factory

DESCRIPTION

This module allows you to load modules using only parts of their name, relatively to the current module or to a given module. Module names are by default searched below the current module, but can be searched upper in the hierarchy using the ..:: syntax.

In order to further loosen the namespace coupling, import returns the full names of the loaded modules, making object-oriented code easier to write:

use relative;

my ($Maker, $Publisher) = import relative qw(Create Publish);
my $report = $Maker->new;
my $publisher = $Publisher->new;

my ($Base, $Factory) = import relative -to => "Enterprise::Framework"
                            => qw(Base Factory);
my $thing = $Factory->new;

IMPORT OPTIONS

Import options can be given as an hashref or an arrayref as the first argument:

# options as a hashref
import relative { param => value, ... }  qw(Name ...);

# options as an arrayref
import relative [ param => value, ... ]  qw(Name ...);

In order to simplify the syntax, the following shortcut is also valid:

import relative -to => "Another::Hierarchy" => qw(Name ...)

Only one parameter is currently supported, to, which can be used to indicate another hierarchy to search modules inside.

import will die as soon as a module can't be loaded.

import returns the full names of the loaded modules when called in list context, or the last one when called in scalar context.

AUTHOR

Sébastien Aperghis-Tramoni, <sebastien at aperghis.net>

BUGS

Please report any bugs or feature requests to bug-relative at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=relative. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

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

perldoc relative

You can also look for information at:

ACKNOWLEDGEMENTS

Thanks to Aristotle Pagaltzis, Andy Armstrong and Ken Williams for their suggestions and ideas.

COPYRIGHT & LICENSE

Copyright 2007 Sébastien Aperghis-Tramoni, all rights reserved.

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