Сокращение для ссылки на имена пакетов Perl/Moose?
В Python и Java у нас есть import
, чтобы исключить повторение полнофункциональных имен пакетов/модулей во всем коде. Есть ли эквивалент в Perl/Moose? Я думаю, что это действительно сделало бы Муса более приятным, если бы нам не пришлось повторять MyApp::Model::Item
. Вместо этого я хотел бы [somehow declare] MyApp::Model::Item;
и позже просто обратиться к Item
. Я могу думать обо всех этих случаях использования, где используются имена классов...
-
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
Если такой вещи еще нет, любая идея о том, как я могу начать ее чистить? Я вижу, что было бы сложно справиться с случаями, когда имя класса используется как строка.
Ответы
Ответ 1
Все это работает с 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
.