9
votes

Comment puis-je appeler une classe Perl avec un nom plus court?

J'écris un module Perl Galaxy :: Sge :: makejobsh avec OO.

Je veux utiliser makejobsh-> nouveau () au lieu de galaxy :: sge :: makejobsh-> nouveau () , ou d'autres noms de noms. Comment puis-je faire ça?


0 commentaires

5 Réponses :


12
votes

Vous pouvez suggérer que vos utilisateurs utilisent le Aliased Module pour charger le vôtre:

package Galaxy::SGE::MakeJobSH;

use Exporter 'import';
our @EXPORT = qw(MakeJobSH $MakeJobSH);

our $MakeJobSH = __PACKAGE__;
sub MakeJobSH () { __PACKAGE__ };


3 commentaires

Je souhaite aliased faisait partie de la distribution standard.


Utiliser Package est beaucoup plus intelligent.


@Chris Lutz: Pourquoi quand constante est-il absolument identique à la même dactylographie? Stackoverflow.com/Questtions/1430548/...



2
votes

merci cjm.

Je viens de choisir d'en ligne aliasé. xxx


1 commentaires

C'était la troisième option de ma réponse.



1
votes

Aliased fonctionne bien lorsque vous souhaitez affecter uniquement les appels des packages qui demandent explicitement l'aliasing. Si vous souhaitez un aliasing global d'un espace de noms à un autre, utilisez package :: alias à la place .


0 commentaires

3
votes

Je ne me préoccupe pas d'aliasing. Je pense que c'est la mauvaise façon d'y aller. Si vous cherchez simplement moins à taper, c'est peut-être la réponse (mais une nouvelle dépendance plus bénéfice que le risque?). Je n'aime pas l'idée de tromper un programmeur de maintenance en cachant le vrai nom de lui depuis que l'aliasing se produit un long chemin loin de son utilisation et il n'y a aucune indication que ce qui ressemble à un nom de classe n'est pas une véritable classe.

Je cherche principalement un sous-classement facile, je laisse donc la classe décider de lui-même quel module mettra en œuvre une partie. P>

Par exemple, je pourrais commencer par une classe qui veut utiliser FOO pour gérer une partie du travail. Je sais que je souhaiterais peut-être sous-classe foo code> plus tard, donc je ne le code pas dur: p> xxx pré>

dans l'application, j'ai choisi de Utilisez 'FOO :: BAR': P>

 #!perl
 use Foo::Bar::Baz;

 my $obj = Foo::Bar::Baz->new();


0 commentaires

1
votes

C'est presque la même approche que aliased mais à l'aide du module PERL standard: xxx


0 commentaires