relative(3pm) User Contributed Perl Documentation relative(3pm)

relative - Load modules with relative names

Version 0.04

    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

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;

This can also be written using aliases:

    use relative -aliased => qw(Create Publish);
    my $report    = Create->new;
    my $publisher = Publisher->new;
    use relative -to => "Enterprise::Framework", -aliased => qw(Base Factory);
    my $thing = Factory->new;

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 simplyfing syntax, options can also be given as dash-prefixed params:

    import relative -param => value, qw(name ...);

Available options:

"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.

Sebastien Aperghis-Tramoni, "<sebastien at aperghis.net>"

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.

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

    perldoc relative

You can also look for information at:

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

Copyright 2007 Sebastien 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.

2022-11-19 perl v5.36.0