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

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

プラグマをimportするとuseしたクラスにもプラグマが効くようになる
プラグマをimportするとuseしたクラスにもプラグマが効くようになる - 僕ト云フ事@はてな出張版

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

1
2
3
use Moose ();
$n = 999;
print $n;

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

1
2
3
use Moose;
$n = 999;
print $n;

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

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

comments powered by Disqus
Hugo で構築されています。
テーマ StackJimmy によって設計されています。