2010-09-05 60 views
11

在Python和Java中我們都有import以消除代碼中重複的完全限定的封裝/模塊名稱。 Perl/Moose中是否有任何等價物?如果我們不需要重複MyApp::Model::Item,我認爲這會讓Moose更好用。相反,我想[somehow declare] MyApp::Model::Item;和稍後,只需參考Item。我能想到的所有的地方都使用類名,這些用例的......提及Perl/Moose包名稱的速記?

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

如果現在還沒有這樣的事情,有關我如何開始乾淨地實施這個的任何想法?我可以看到,處理類名用作字符串的情況將會非常棘手。

回答

18

這一切工作與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) { ... } 

這不:

$Item::SOME_PACKAGE_GLOBAL_VAR 

孤男寡女類似的東西,似乎是相當罕見的,但我想它可能作出與namespace::alias工作模塊。

+0

太棒了!感謝你及時的答覆! – PBJ 2010-09-05 21:29:51

+0

是的,我很少需要訪問一個全局包,所以我可以在這些情況下使用拼寫的名字。 – PBJ 2010-09-05 21:30:40