SYNOPSISの構文を自動でチェックする

新しいモジュールの使い方を調べるときに真っ先に目を通すのがPODのSYNOPSISセクションである。特に,英語が母語ではないPerlerにとってはPODの中で最も重要なセクションといっても過言ではない。それだけに,自らモジュールを書くときは細心の注意を払う。
ところで,その内容の構文チェックは今まで手動でやっていたのだが,Test::Weakenのテストファイルを眺めていると面白いテストがあった。synpsis.tというのがそれで,PODのSYNPISISセクションの中身を抜き出して実行するというものだ。考えてみれば,構文チェックで十分なら特別なモジュールのサポートを得なくても簡単に書くことができる。
そこで,一般化してModule::Setup用のテンプレートにしてみた。

#!perl -w
use strict;
use Test::More tests => 1;
use [% module %] ();
my $file = $INC{'[% module_path %].pm'};
(my $podfile = $file) =~ s/ \.pm \z/.pod/xms;
$file = $podfile if -e $podfile;

my $content = do{
    local $/;
    open my $in, '<', $file or die "Cannot open $file: $!";
    <$in>;
};

# extract SYNOPSIS from the pod
my($synopsis) = $content =~ m{
    ^=head1 \s+ SYNOPSIS
    (.+)
    ^=head1 \s+ DESCRIPTION
}xms;
# no strict 'vars' if needed
ok eval("sub{ $synopsis }"), 'syntax ok' or diag $@;
__END__

このテストファイルをモジュールテンプレートディレクトリのxt/04_synopsis_syntax.tとして保存する。
これで,SYNOPSISセクションに構文エラーがないことを保障できる。