use strict; use warnings; use 5.012; use Parse::RecDescent; $::RD_ERRORS = 1; #Parser dies when it encounters an error $::RD_WARN = 1; #Enable warnings - warn on unused rules &c. $::RD_HINT = 1; #Give out hints to help fix problems. #$::RD_TRACE = 1; #Trace parsers' behaviour my $grammar = <<'END_OF_GRAMMAR'; { use Data::Dumper; use 5.012; #enable say() } another_rule: 'new' employee_info { say Dumper(\@item); } employee_info: 'employee' name id { say Dumper(\@item); say '-' x 20; 'hello world'; } name: m{ \S+ }xms id: m{ \d+ }xms END_OF_GRAMMAR my $text = "new employee Joe 10"; my $parser = Parse::RecDescent->new($grammar) or die "Bad grammar!\n"; defined $parser->another_rule($text) or die "Text doesn't match"; --output:-- $VAR1 = [ 'employee_info', 'employee', 'Joe', '10' ]; -------------------- $VAR1 = [ 'another_rule', 'new', 'hello world' ];