my $grammar = <<'END_OF_GRAMMAR'; { use Data::Dumper; use 5.012; #enable say() } delimited_or_list: word(s /or/) { say Dumper(\@item); } word: m{ \S+ }xms END_OF_GRAMMAR my $text = "apple or strawberry or cherry"; my $parser = Parse::RecDescent->new($grammar) or die "Bad grammar!\n"; defined $parser->delimited_or_list($text) or die "Text doesn't match"; --output:-- $VAR1 = [ 'delimited_or_list', [ 'apple', 'strawberry', 'cherry' ] ];