#! /usr/local/bin/perl -sw BEGIN { close STDERR and open STDERR, '>./STDERR' or die $!; } use Parse::RecDescent; #============================================ # GRAMMAR DEFINITION HERE #============================================ $grammar = q{ Para: List(s) /\Z/ | { use Data::Dumper 'Dumper'; print "$_->[0]\n" for @{$thisparser->{errors}}; exit; } List: # Order Name Score Prize | Order: /\d+/ {print "@item\n";} | Name: /\w+/ {print "@item\n";} | Score: /\d+/ {print "@item\n";} | Prize: /[^\n]+/ {print "@item\n";} }; #============================================ # MAIN PROGRAM STARTS HERE #============================================ $parse = new Parse::RecDescent ($grammar); my $text = do { local $/; }; $parse->Para($text); __DATA__ 1 Pig 100 red flower // 1 can this be removed? 2 Han 80 bread /* 2 I want this removed! */ 3 Hen 50 ass kicked /* 3 this comment should be handled too */ 3 Fdi 99 rose /* 4 failed msg if unbalanced comment here