First slide Test line Second line Line with explicit font size @20 #### #!/usr/bin/perl use strict; use warnings; use Parse::RecDescent; use Data::Dumper; $::RD_ERRORS = 1; $::RD_WARN = 1; $::RD_HINT = 1; $::RD_TRACE = 1; my $grammar = <<'END_GRAMMAR'; # startrule: slide(s) slide: line(s) line_end(s) line: text fontspec(?) line_end text: /[^@\n]+(?:\b@[^@\n]*)*/ fontspec: "@" fontspec_size fontspec_size: /\d+/ | line_end: "\n" END_GRAMMAR my $good_text = <<'SAMPLE_TEXT'; Test Line @20 Even more test address@test.com @20 Escaped \@text SAMPLE_TEXT my $bad_text = <<'SAMPLE_TEXT'; Bad line @invalid Also bad @foo @20 SAMPLE_TEXT my $parser = new Parse::RecDescent ($grammar); #$parser->startrule($text); $parser->startrule($good_text); print STDERR "\n" x 3; $parser->startrule($bad_text);