自動的にstrictが有効になる理由

2009年2月12日
| コメント(0) | トラックバック(0) 自動的にstrictが有効になる理由

Mooseをuseすると自動的にstrictになる、というのが不思議だったのだが、その解説が見つかった。

プラグマを import すると use したクラスにもプラグマが効くようになる

…ということです。

useすると、自動的にimport関数が実行されるわけですが、この機能を利用してstrictなどのプラグマもimportさせることができる、ということのようです。
ふと気づいてMENTAのソースも見ましたが、同じような仕組みになっていました。

なので、importをしないようにuseすると、当然プラグマもimportされません。

use Moose ();
$n = 999;
print $n;

↑だとエラーが出ません。

use Moose;
$n = 999;
print $n;

で、こうした場合は、以下のようなエラーが出ます。

Moose does not export its sugar to the 'main' package.
Global symbol "$n" requires explicit package name at D:\WebApp\copal\copal.tmp line 2.
Global symbol "$n" requires explicit package name at D:\WebApp\copal\copal.tmp line 3.
Execution of D:\WebApp\copal\copal.tmp aborted due to compilation errors.

Mooseからのメッセージは謎ですね。
sugarってどういう意味なんでしょう?


ちなみに、この手のちょっとしたコードは、Copal 2を使って書いています。
エディタ機能はそれほどでもありませんが、保存しなくても一時ファイルを使って実行してくれるので、手軽で便利です。

トラックバック(0)

このブログ記事に対するトラックバックURL:

コメントする

Google検索

Last.fm

このブログ記事について

このページは、のぶりんが2009年2月12日 23:36に書いたブログ記事です。

ひとつ前のブログ記事は「モダンPerl入門が届いた」です。

次のブログ記事は「Moose::Roleが興味深い」です。

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

Creative Commons License
このブログのライセンスは クリエイティブ・コモンズライセンス.
Powered by Movable Type