Perlプロプログラマへの第1歩

はじめに

プロとしてのPerlプログラマが身につけておくべきことをつらつらと書いてみます。

対象読者は、(というより現在の私の状態でもありますが)

  • 達人プログラマーを読んで感銘を受けた。
  • が、そこから今実践できているのはDRY、割れ窓の心がけとソースコード管理くらい。
  • Perlプログラミング救命病棟でいったら、レベル7以上ではあることは自負しているがレベル8と言っていいのか迷っている。
  • モダンPerlプログラミング入門を読んで、モダンと自分の差にどっきりして、せめてテストとドキュメントをなんとかしようと思っている。
  • まあ、とは言っても理想にはなかなかなれないもので、日々努力して理想のPerlプロプログラマに漸近していくものと思い、やれるところからやりましょうか、といったスタンス。

です。

同じような境遇にあり、同感できる方がいらっしゃいましたら、一緒にステップアップしていきましょう。

なにはともあれCPAN形式

モダンPerlプログラミング入門で紹介されているようにCPAN形式で開発すると、
とても簡単に安定した開発プロセスを導入することができます。

じゃあ、どうやってCPAN形式で開発するか?というときにいろんな方法があるようですが、
私はh2xsを選択しました。

理由はすぐ使えるからです。
Module::StarterとかModule::Installとかは、CPAN形式になれて、どうしてもh2xsじゃつらくなってきてからでいいかな、と。

h2xs

$ h2xs -XAP --skip-exporter --use-new-tests -n Foo::Bar

これで開発プロセスを回すだけの一式ができます。上記の実行結果は

Defaulting to backwards compatibility with perl 5.8.5
If you intend this module to be compatible with earlier perl versions, please
specify a minimum perl version with the -b option.

Writing Foo-Bar/lib/Foo/Bar.pm
Writing Foo-Bar/Makefile.PL
Writing Foo-Bar/README
Writing Foo-Bar/t/Foo-Bar.t
Writing Foo-Bar/Changes
Writing Foo-Bar/MANIFEST

とりあえず、今後テストを増やす時にそなえて、

$ cd Foo-Bar/
$ mv t/Foo-Bar.t t/00_compile.t

とし、MANIFEST内の対応する記述を修正します。

あとは、こんな風に、

$ perl Makefile.PL PREFIX=~/local/perl
Checking if your kit is complete...
Looks good
WARNING: Setting ABSTRACT via file 'lib/Foo/Bar.pm' failed
 at /usr/lib/perl5/5.8.5/ExtUtils/MakeMaker.pm line 571
Writing Makefile for Foo::Bar
$ make
cp lib/Foo/Bar.pm blib/lib/Foo/Bar.pm
$ make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00_compile.t .. ok
All tests successful.
Files=1, Tests=1,  0 wallclock secs ( 0.03 usr  0.00 sys +  0.03 cusr  0.02 csys =  0.08 CPU)
Result: PASS

perl Makefile.PLして、makeして、pmを修正して、make testの繰り返しで単体テスト付きの開発プロセスが回ります。

PODをちゃんと書いてないので警告がでてますね。PODについてはまたの機会に書きます。

make時に、MANIFESTに書いてあるのに、実際にないファイルは警告がでますので、
案外それで間違いを気付いたりして重宝します。

ところで、perl Makefile.PLでは、PREFIXを指定していますが、自分が管理者じゃない場合に
make install時に、インストールする先を指定します。これがないと、/usr/lib/perl5とかに
作ったpm類をコピーしようとしますが、管理者権限がないと失敗します。
また、自分で作ったモジュールはperlの場所じゃなくてどこか別の場所で管理する場合なども
指定するとよいと思います。

私の場合は、

$ cat ~/bin/localmake
#!/bin/sh
perl Makefile.PL PREFIX=~/local/perl
make

として、localmake,make test,make installのような感じにしています。

まとめ

プロとしてのPerlプログラマが身につけておくべきことについて、
まずは開発プロセスをh2xsとmakeで構築することについて述べてみました。

これで、単体テスト付きの開発プロセスを手軽に導入することができます。

PODのことやテストの内容に関しても次以降に書く予定です。