【Perl】標準モジュールツールキットを作ろう(ただしソースフィルタなしで)

投稿日: / 更新日:

Perl Advent Calendar 2012を読み漁っていたところ、Syntax::Collectorというモジュールが紹介されていたので、試しに少し使ってみました。以下、簡単にご紹介します。

Perlでいくつかのまとまったモジュールを書く時、複数のモジュールで似たようなuse文をあちこちに書いてしまうことがよくあります。これは、プログラマーの三大美徳のうちの“怠慢”(Laziness)に反してしまうので、一ヶ所にまとめる必要があります。

ただし、共通するuse文だけを単に別モジュールに切り出すだけでは不十分で、Modern::Perlがやっているように、自前のimportサブルーチン等を実装する必要がありますが、少々面倒です。また、もう一つの方法として、Perl Hacks(オライリー・ジャパン)のHack#34にFilter::Macroモジュールを使用したハックが紹介されています。これは、最小限のコーディングで済むのが魅力的ですが、ソースフィルタを使っているのが残念な点です。

ここで冒頭の話題に戻りますが、Syntax::Collectorというモジュールを使用することで、ソースフィルタを使わず、かつ最小限のコーディングで、これを実現することができます。以下はこのモジュールを使用したコードの例です。

ハッシュキー-collectの値に、何度も書きたくないuse文をまとめて記述します。このモジュールを使用する側は、MyApp::Syntaxuseするだけで、strictwarnings及びfeatureの3つのプラグマをまとめて使用することができます(もちろん、レキシカルスコープの範囲内で作用します)。以下は、上記のモジュールのテストスクリプト及びその実行例です。

テストコードでは、(MyApp::Syntaxにバンドルされた)warnings及びfeatureプラグマが有効になっていることが確認できます。なお、strictプラグマについては、パッケージ名で修飾されていないグローバル変数の行のコメントアウトを解除することで、その効果を確認することができます(すなわち、コンパイルエラーになります)。

以上、簡単ですがPerlに関するトピックをご紹介しました。

最新情報発信中

Twitterやメルマガでも、Hinemosの保守、
開発、導入、構築やカスタマイズ等の
お役立ち情報を発信しています。
是非ご登録ください。