Perl のプラグマモジュールの作り方
autolocale を作る際に Perl のプラグマモジュールの作り方について調べたので、書き残しておきます。
プラグマモジュールとは
strict.pm や warnings.pm のようにレキシカルスコープで振る舞いを変更するモジュールをプラグマモジュールと呼び、通例として小文字のモジュール名がつけられています。
perl 5.10 以降(正確には5.9.5)の perl では組み込みのプラグマモジュールだけでなく自分で作ることができるようになっています。
レキシカルスコープで挙動を変えるには
Perlにはレキシカルスコープで挙動を変えるための仕組みが用意されています。それが、$^Hと%^Hです。
$^H
$^Hはヒントフラグなどと呼ばれる、Perl インタプリタの挙動を変えるためのフラグです。strict.pmとかcommon::senseを読んだことがある人は見たことがあると思います。ヒントフラグの各ビットに意味があります(perl.hに#definedで定義されています)が、よくわからない人はいじらないほうがいいと思います。
%^H
こちらはヒントハッシュなどと呼ばれるもので、レキシカルスコープなハッシュです。この値は (caller($level))[10]で指定したスコープの\%^Hを取り出すことができます。このヒントハッシュの値を利用してレキシカルスコープで挙動を変更することができます。autolocale ではこちらを利用しています。
参考
詳しくは perldoc perlpragma を読めばいいと思います。
perlpragma - perldoc.perl.org