no Mouseするとblessedやconfessが名前空間から除かれる

| コメント(0)

ちょっと恣意的なタイトルですが、つまりこういうことです。

package Foo;

# 地点A
use Carp qw(croak confess);
use Scalar::Util qw(blessed);
use Any::Moose; # 明示的にuse Mouseしても同様。no Mouseも同様。
no Any::Moose;
__PACKAGE__->meta->make_immutable;
# 地点B

1;

上記のようなコードで、Mouseがロードされる(Mooseがロードされてない)場合、地点Bではcroakは使えますがconfessblessedが名前空間から除かれています。

現在のMoose(0.25)の場合、no Mooseしても、use Mooseした時に既にインポートされていた(つまりuse Mooseによって始めてインポートされたわけでない、つまり地点Aでインポートされた)シンボルは、名前空間から取り除かれません。

解決策としては、素直に完全修飾名でScalar::Util::blessedCarp::confessなどとすることです。その場合には上記のような事情があるということで最初からuse Scalar::Util qw();などとして意図を明確にしておいた方が良いかも知れません。

勿論、no Mooseした後(地点B)にuse Carp qw(:DEFAULT confess);することでも良いですし、もしかしたらその方が座りがよいかも知れません。

コメントする

筆者"Gardejo"について

  • Twitter: @gardejo
  • GitHub: gardejo
  • CodeRepos: gardejo
  • CPAN: MORIYA

このサイトについて

Eorzea System Worksは、架空のシステム開発結社です。

FF14.name (FinalFantasyXIV.name)では、アヴァター(プレイヤーキャラクター)の管理システムやイベント出欠・リマインダシステムや、リンクシェル(LS)運営・管理システムやDKPシステムなどを設計・開発・公開する予定です。

関連サイト

関連サイトでは、他にもFF14に関連するサイトをいくつか紹介しています。

リンク, トラックバック歓迎

このブログへのリンク(どのページでも構いません)やトラックバックを歓迎します。

設計・開発・運用の参考にさせていただきますので、コメントもお気軽にお寄せください!

個別の記事に対するご意見などのほか、目安箱もご用意しています。

このブログ記事について

このページは、Gardejoが2009年6月28日 15:43に書いたブログ記事です。

ひとつ前のブログ記事は「Movable Typeのアーカイブマッピングでtext/plainになる」です。

次のブログ記事は「ArkをCGIで動かすスクリプト(1)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

2014年2月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28  

やや真面目なサイト