perltidyというのは、Perlベストプラクティスに載っている、ソースコードを綺麗に整形してくれるソフト。
最初は実行形式のプログラムだと思っていたら、Perlスクリプトだった。
考えてみれば、PerlをWindowsでやっていることがどちらかといえばイレギュラーなので、Windowsの実行形式でないのは当然か。
インストールの方法がよくわからなかったのだが、モジュールならcpanからインストールできるんじゃないかと思ってモジュール名を指定したところ、ズバリ、ありました。
そのままインストールを開始。
cpanがちゃんと使えるようになっていれば、インストールは簡単。
cpan> install Perl::Tidy
インストールが完了すると、Perl.exeと同じフォルダに「perltidy.bat」というファイルができた。
あとは簡単に手順を。
oreilly.com -- Online Catalog: Perl Best PracticesのExamplesからソース一式を取ってくる。
解凍すると出てくる「perltidyrc」を「.perltidyrc」にリネーム。
ファイルを開いて、4行目の「-st」をコメントアウト(行頭に#を追加する)してやる。
整形したいファイル(仮にtest.plとでもしておこう)と同じフォルダに「.perltidyrc」をコピー。
で、コマンドプロンプトを開いて、そのフォルダで以下のコマンドを実行(perltidy.batの場所にはPathが通っているという前提)。
perltidy test.pl
と、まあ、こんな感じで「test.pl.tdy」というファイルが新しくできる。このtdyファイルが整形されたモノだ。
ちなみに、リメイク:ファイルに書き出す@のぶろぐのコードを、整形させると以下のようになった。
整形されたソースコード
#!/usr/bin/perl -T
use strict;
use warnings;
use Encode;
use encoding "euc-jp";
use CGI::Pretty;
use FileHandle;
{
my $cgi = CGI::Pretty->new;
my $styles = [ q{../../ipp.css}, q{../test.css} ];
my $wdays = [ "日", "月", "火", "水", "木", "金", "土" ];
my $output = "";
$output .= &print_header( $cgi, "テスト3", $styles );
$output .= $cgi->p("「temp.txt」に書き出します。");
my $fh = FileHandle->new( "./temp.txt", "w" ) or die;
my $fh_output = "";
$fh_output .= "この文は temp.txt の中身になるはずです。\n";
$fh_output .= "書き込んだ時間は、";
my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst )
= localtime;
$fh_output .= sprintf(
"%04d/%02d/%02d(%s) %02d:%02d:%02dです。\n",
$year + 1900,
$mon + 1, $mday, $wdays->[$wday], $hour, $min, $sec
);
$fh->print( Encode::encode( "utf8", $fh_output ) );
undef $fh;
$output .= $cgi->div( { -class => "test" },
$cgi->a( { -href => "./temp.txt" }, "temp.txtを見る" ) );
$output .= &print_footer($cgi);
# print Encode::encode("utf8", $output);
print $output;
}
exit;
# ヘッダ
sub print_header {
my ( $cgi, $title, $styles ) = @_;
my $result = "";
$result .= $cgi->header( { -charset => "utf-8" } );
$result .= $cgi->start_html(
{ -lang => 'ja',
-title => $title,
-style => { src => $styles },
}
);
$result .= $cgi->div(
{ -class => "head" },
$cgi->h1($title),
$cgi->hr,
$cgi->a( { -href => "../../../" }, "Home" ),
"/",
$cgi->a( { -href => "../../" }, "Perl" ),
"/",
$cgi->a( { -href => "../" }, "TestCGI Index" ),
$cgi->hr,
);
return $result;
}
# フッタ
sub print_footer {
my ($cgi) = @_;
my $fh = FileHandle->new("../../sig.txt") or die;
my $sig = join "", $fh->getlines;
undef $fh;
my $result = "";
$result .= $cgi->div(
{ -class => "foot" }, $cgi->hr,
$cgi->a( { -href => "../../../" }, "Home" ), "/",
$cgi->a( { -href => "../../" }, "Perl" ), "/",
$cgi->a( { -href => "../" }, "TestCGI Index" ), $cgi->hr,
$sig,
);
$result .= $cgi->end_html;
return $result;
}
スゲェ。
