ドキュメントとテストコードつきのPerlスクリプトを書く方法

Re http://d.hatena.ne.jp/perlcodesample/20091130/1258979624, http://mt.endeworks.jp/d-6/2009/12/scriptsubimport.html

スクリプトとコードとテストを単一のファイルにまとめたい*1という需要が、かねて自分の中であったので教えを請うた結果、以下のような感じで書けばいいことがわかった。

#! /usr/bin/perl

use modules...;

my $global = ...;

sub foo {
  ...
}

sub bar {
  ...
}

run_tests()
    if $ENV{HARNESS_ACTIVE};

# メインのコード
foo();
bar();
...

sub run_tests {
  ...
  exit;
}

__END__

=head1 NAME my_script.pl

...

テストをするには、

% prove my_script.pl

とやれば、HARNESS_ACTIVE 環境変数がセットされてるのでテストコードが実行される、と。これは便利。yappo++ tokuhirom++

ちなみに Test-Inline-2.213 - Embed your tests in your code, next to what is being tested - metacpan.org みたいなアプローチもあるらしい

20:41追記:

で、上みたいに書いたファイルを CPAN モジュールに含める場合は、Makefile.PL に

install_script 'my_script.pl';
tests 'my_script.pl';

とか書けばいいらしい。tokuhirom++

*1:複数のファイルに分割する労力を払うならコードをモジュール化して普通にテスト書きます