relative.pm

Sébastien Aperghis-Tramoni, sebastien@aperghis.net

Raisonnement

  • Ai entendu des codeurs Perl se plaindre depuis quelques années

    • Ce serait tellement cool si on avait des espaces de noms relatifs

  • Plus récemment, un collègue voulait quelque chose de similaire "parce que import en Python fait ça"

  • Encore une fois, c'était un problème de JFDI

relative.pm

  • Charge les modules avec un nom relatif au module courant, ou depuis une autre hiérarchie

  • Renvoie les noms complets des modules chargés

  • Peut aussi créer des aliases comme aliased (à la demande d'Ovid)

Exemple

  • Charger quelques modules

  •     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

Exemple

  • En utilisant les noms renvoyés par import

  •     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;

Exemple

  • En utilisant les aliases

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

Disponibilité

  • Dans votre miroir CPAN

  • Fonctionne sur Perl 5.004