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のような感じにしています。