#!/usr/bin/perl while (<>) { if (/^\s*\[(.*?)\]/) { $head=$1; } elsif (!/^\s*;/ && (/^\s*(.*?)\s*=\s*(.*?)\s*$/)) { $var{$head}->{$1}=$2; } } for $head (keys(%var)) { print "[$head]\n"; for (keys(%{$var{$head}})) { print "$_=", $var{$head}->{$_}, "\n"; } }