#!/opt/perl5/bin/perl -w use strict; use Parse::RecDescent; use vars qw ($grammar); $::RD_HINT=1; use Data::Dumper; $grammar = q( file: section(s) section: header assign(s?) header: '[' /\w+/ ']' { $item[2] } assign: pair comment(?) pair: /\w+/ '=' /\w+/ { [$item[1],$item[3]] } comment: /[\#\;]/ /.*/ { $item[2] } ); my $parser= Parse::RecDescent->new($grammar); my $text; { $/=undef; $text=; } my $tree=$parser->file($text); print Dumper($tree); __DATA__ [Section1] key1=value1 key2=value2 #Comment2 key3=value3 [Section2] key4=value4 key5=value5 key6=value6 ;Comment 6