2010-09-05 20 views
11

En Python et Java, nous avons import pour éliminer la répétition de noms de modules/modules complets dans le code. Y a-t-il un équivalent en Perl/Moose? Je pense que cela rendrait Moose plus agréable à utiliser si nous n'avions pas à répéter MyApp::Model::Item. Au lieu de cela, je voudrais [somehow declare] MyApp::Model::Item; et plus tard, il suffit de se référer à Item. Je peux penser à tous ces cas d'utilisation où les noms de classe sont utilisés ...Graphe pour faire référence aux noms de paquets Perl/Moose?

  • extends 'Item';
  • with 'ItemRole';
  • Item->new(name => 'thing');
  • method foo(Item $xyz) { ... }, avec MooseX::Method::Signatures
  • $var->isa('Item');
  • try { ... } catch (DatabaseError $e) { ... }, avec TryCatch
  • $Item::SOME_PACKAGE_GLOBAL_VARIABLE

S'il n'y a pas encore une telle chose, une idée sur la façon dont je pourrais commencer à mettre en œuvre proprement cela? Je peux voir qu'il serait difficile de traiter les cas où le nom de classe est utilisé comme une chaîne.

Répondre

18

Tout cela fonctionne avec aliased

use aliased 'MyApp::Model::Item'; 
use aliased 'MyApp::ItemRole'; 
use aliased 'MyApp::Exception::DatabaseError'; 

extends Item; 
with ItemRole; 
Item->new(name => 'thing'); 
method foo (Item $xyz) { ... } 
$var->isa(Item); 
try { ... } catch(DatabaseError $e) { ... } 

Cela ne signifie pas:

$Item::SOME_PACKAGE_GLOBAL_VAR 

besoin de quelque chose comme ça semble être assez rare, mais je suppose que cela pourrait être fait de travailler avec le namespace::alias module.

+0

Fantastique! Merci pour la réponse rapide! – PBJ

+0

et oui, j'ai rarement besoin d'accéder à un paquet global, donc je peux vivre avec épeler le nom dans ces cas. – PBJ