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を使って書いています。
エディタ機能はそれほどでもありませんが、保存しなくても一時ファイルを使って実行してくれるので、手軽で便利です。


コメントする