@nqounetです。
この記事はPerl入学式 Advent Calendar 2014の17日目の記事です。
昨日は、@m_shige1979さんの、Perl入学式に参加した感想&その後ちょっと作ったMojoliciousのサイトでした。
痛風は本当に痛いらしいので、ビール好きの皆さんは気をつけてください。
ぬか漬けアプリ
Perl入学式のアドベントカレンダーの7日目に、tomchaさんが書いた「ぬか漬けアプリ」は、なかなか味があって良いですね。
ただ、どうしても気になったことが2つあったので、勝手に添削してみました。(とは言え、なにわPerlで事前に許可は得てあります)
なるべく簡単に説明するために、厳密には正しくない部分もありますが、ご了承ください。
モジュールの名前
Perlでは小文字のモジュール名はプラグマを示すという約束になっていますので、自作のモジュールは、Nukaduke
のように大文字から始めなければなりません。
Perl は小文字のモジュール名を、integer や strict のような"プラグマ" モジュールのために予約しています。
perlstyle - Perl スタイルガイド - perldoc.jp
ファイルシステムの都合で大文字小文字だけを変更するのは困難な場合が多いので、今回は名前を一旦Nukadoko
に変更します。
自作のモジュールを作成する場合は、ファイル名は大文字からにする、ということを覚えておきましょう。
関数の名前空間
今回の場合、orenuka
でuse Nukadoko
すると、pickle
、lookin
、takeout
という3つのサブルーチンが使えるようになります。
しかし、orenuka
だけを見ていると唐突に関数が使用されていて、わかりづらいので、何処に定義されているのかをもう少しわかりやすく表示すると良いと思います。
また、このような使い方をしていると、意図せずに関数名が重複してしまうことがあります。
Perlにはそれを防ぐ方法があります。
Perlは、他のパッケージの変数によってあるパッケージが壊されるのを 防ぐために、選択的名前空間(alternative namespace)の機構を提供しています。
perlmod - Perl のモジュール (パッケージとシンボルテーブル) - perldoc.jp
選択的名前空間
を実現するのがパッケージ宣言です。
今回はNukadoko
を使用しているので、Nukadoko.pm
にNukadoko
というパッケージ名をつけることにします。
Nukadoko.pmの一行目を以下のように始めるだけです。
|
|
そうすると、Nukadoko
に定義されているpickle
は、orenuka
の中ではNukadoko::pickle
として使用できるようになります。
多少文字数は増えますが、何処に書いてある関数を呼び出しているのかが確実に把握できるようにもなりますので、パッケージ宣言を使った上でuse
するようにしましょう。
どうしてもパッケージ名が省略したい場合は、ちゃんと方法はあります。
Exporter
というモジュールを使用するのですが、詳しくはPODをご覧ください。
やり方は1つじゃない
Perlという言語を調べていると、必ずTMTOWTDI
という言葉に出会います。
There’s more than one way to do it (TMTOWTDI or TIMTOWTDI, pronounced Tim Toady) is a Perl programming motto.
There’s more than one way to do it - Wikipedia, the free encyclopedia
There's More Than One Way To Do It.
は、「やり方は1つじゃない」という意味です。
今回添削したやり方が唯一の方法ではありません。
ただし、もっとうまいやり方のためには、守ったほうが良い、あるいは、守るべき事もあります。
Perlで守るべき約束事はそれほど多くはありませんので、この機会に是非覚えておいてください。
次回予告
明日はPerl入学式アドベントカレンダーで5回目の登場のpapixさんです。
Perl入学式の歴史を振り返るみたいです。
お楽しみに!