#!/opt/perl5/bin/perl -w use strict; use Parse::RecDescent; use vars qw ($grammar); $::RD_AUTOACTION=q{print"$item[0]: @item[1..$#item]\n"; 1}; $grammar = q( file: section(s) section: header assign(s?) header: '[' /\w+/ ']' assign: /\w+/ '=' /\w+/ | /\w+/ '=' /\w+/ '' /\s+[\;#]/ /\w+$/ ); my $parser= Parse::RecDescent->new($grammar); my $text; { $/=undef; $text=; } my $tree=$parser->file($text); __DATA__ [Section1] key1 = value1 #Comment key2 = value2 ;Comment key3 = value3 [Section2] key4 = value4 key5 = value5 #### header: [ Section1 ] assign: key1 = value1 section: 1 ARRAY(0x401da6cc) file: ARRAY(0x401da708)