Whiteのふりーとーく

添削?

About this Page |過去分一覧

近頃版/another blog@hatena/Wiki/BBS

< (no title) | あげぷらDay >

 

添削?

perlで気分転換を見て血が騒いだので反応(笑

つことで「Perlっぽく」書き直してみた例を以下に。ただし動かしてないので動作は保証しません(ぉ

#!/usr/local/bin/perl
sub usage{
    print "usage:\n";
    print "\t\n$0 テーブルファイル HTMLディレクトリ";
    exit;
}
usage() if (@ARGV != 2);
$table_name = $ARGV[0];
$dir_name = $ARGV[1];
open(TABLE, $table_name) or die "Can't open table file '$table_name'";
    # テーブルファイルを連想配列に格納
    while (<TABLE>){
        chomp();
        my($old,$new) = split(/\t/, $_);
        $table{$old} = $new;
    }
close(TABLE);
#パターンマッチ一発で置換するための小細工
$pattern = join("|",sort {length($b) <=> length($a)} keys %table);
# ディレクトリ内のファイルを列挙
opendir(DIR, "$dir_name") or die "Can't open target dir '$dir_name'";
while ($html = readdir(DIR)) {
    next unless($html =~ /\.htm/); # ファイル名に".htm"を含むファイルだけ処理
    print "$html を処理中...";
    my $text;
       
    # 読み込む
    unles(open(ORIGINAL, $html)){
        print "読み込めませんでした。スキップします。\n";
        next;
    }
    while (<ORIGINAL>) {
        # テーブルに基づき、文字列置換
        s/($pattern)/$table{$1}/og; #$patternは不変なのでoオプションを付けて高速化
        $text .= $_;
    }
    close(ORIGINAL);
    # HTMLを書き出す
    unless(open(RESULT, "> $html")){
        print "書き込めませんでした。スキップします。\n";
        next;
    }
    print RESULT $text;
    close(RESULT);
    print "完了\n";
}
closedir(DIR);
exit;

TrackBack ping url:

名前

TrackBack:


御意見・御感想の宛先white@niu.ne.jp