PODを使ったHTML化

30分プログラム、その381。文字列をHTML化するのにPOD(Plain Old Document)を使ってみる。
PODファイルをHTMLファイルに変換するpod2htmlコマンドは用意されている。これをうまいこと利用して、文字列をHTMLに変換するpod2html関数が作りたかった。RailsのRedCloth的な使い方ができるかなぁ、と思って。
本当はPod::Htmlを利用したかったけれど、

pod2html("pod2html",
         "--podpath=lib:ext:pod:vms",
         "--podroot=/usr/src/perl",
         "--htmlroot=/perl/nmanual",
         "--libpods=perlfunc:perlguts:perlvar:perlrun:perlop",
         "--recurse",
         "--infile=foo.pod",
         "--outfile=/perl/nmanual/foo.html");

みたいな関数しかなかったので、コマンドを実行して実行結果を正規表現で切り出すようにしてみた。たしかにこっちのほうがPerlっぽい。

使い方

print htmlize(<<DOC);
=head1 Htmlize Test

この文章がHTMLに変換されます。

変換ルールはPodにのっとります。
DOC

# 出力:
#  <p>
#  </p>
#  <h1><a name="htmlize_test">Htmlize Test</a></h1>
#  <p>この文章がHTMLに変換されます。</p>
#  <p>変換ルールはPodにのっとります。</p>

ソースコード

=head1 Format pod

hogehoge

=cut

use File::Temp ();

sub extract($){
    my ($content) = @_;
    if($content =~ m(<!-- INDEX END -->\s*(.*)\s*</body>)sm){
	$1;
    }else{
	"none";
    }
}

sub htmlize($){
    my ($content)   = @_;

    $fh = File::Temp->new;
    $fname = $fh->filename;

    print $fh $content;

    extract `pod2html --noheader --noindex $fname 2>/dev/null`;
}
print htmlize(<<DOC);
=head1 Htmlize Test

この文章がHTMLに変換されます。

変換ルールはPodにのっとります。
DOC