iniの変換

id:tetsuro_shida:20060425:1145974366より。私ならこう書くというのを書いてみました。

#!/usr/bin/perl

use strict;
use warnings;

open my $source, '<', 'source.ini' or die "$!\n";
open my $dest,   '>', 'dest.ini'   or die "$!\n";

my $sect;
my @data;
while (<$source>) {
    chomp;
    next if /^\s*;/;
    next if /^\s*$/;

    if (/^\s*(\[.+\])\s*$/) { 
        $sect = $1;
    }
    elsif (/^\s*(.*)\s*=\s*([^;]*)\s*;?.*$/) {
        push @data, "$sect$1=$2";
    }
}

print "$_\n" foreach sort @data;

んー、elsifの部分が不恰好。