=encoding utf8 =pod =head1 題名 Moose::Cookbook::Snack::Keywords - Mooseの禁句 =head1 本文 MooseはPerlの組み込み関数をエミュレートするために多数のシュガー関数をエクスポートしますが、これらのシュガー関数は、ほかのユーザ定義の関数と衝突することがあります。このドキュメントでは簡単に参照できるよう、そういったキーワードの一覧を提供します。 =head2 「meta」キーワード たいていの衝突は避けられますが、C>したらCがインポートされてしまうのは避けられません。このCをオーバーライドしたり、挙動を変えると、Mooseの内部を壊すことになりかねません。 =head2 Mooseのキーワード LやLを使うときに避けるべきキーワードは次の通りです。 =over 4 =item extends =item with =item has =item before =item after =item around =item super =item override =item inner =item augment =item confess =item blessed =back =head2 Moose::Util::TypeConstraintsのキーワード Lを使うときに避けるべきキーワードは次の通りです。 =over 4 =item type =item subtype =item class_type =item role_type =item maybe_type =item as =item where =item message =item optimize_as =item coerce =item from =item via =item enum =item find_type_constraint =item register_type_constraint =back =head2 衝突を避けるには =head3 Mooseを無効にする Lがエクスポートするシュガー関数は、コードの末尾にC>を加えるだけで取り除くことができます。 package Thing; use Moose; # code here no Moose; こうすると、Lが最初にエクスポートしていたシュガー関数がエクスポートされなくなります。LやLも同じやり方でシュガー関数を取り除けます。 =head3 Sub::Exporterの機能を使う L、L、LはいずれもLを使ってエクスポートの処理を行っています。つまり、これらのクラスではLが提供しているすべての機能を利用できるということです。 たとえば、Lを使うと、このようにキーワードをリネームすることもできます。 package LOL::Cat; use Moose 'has' => { -as => 'i_can_haz' }; i_can_haz 'cheeseburger' => ( is => 'rw', trigger => sub { print "NOM NOM" } ); LOL::Cat->new->cheeseburger('KTHNXBYE'); 詳細はLのドキュメントをご覧ください。 =head3 namespace::clean Lを使って名前空間をきれいにすることもできます。ただし、この場合はCを取り除いてしまわないよう注意しなければなりません。 package Foo; use Moose; use namespace::clean -except => 'meta'; # ... =head1 参照 =over 4 =item L =item L =item L =item L =item L =back =head1 作者 John Goulah Cjgoulah@cpan.org> Stevan Little Estevan@iinteractive.comE =head1 COPYRIGHT AND LICENSE Copyright 2006-2009 by Infinity Interactive, Inc. L This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut