1use 5.010; 2use warnings; 3 4use Test::More 'no_plan'; 5 6use Regexp::Grammars; 7 8my $delimited = qr{ <delim=(['"`])> <content=(.*?)> <\_delim> }xms; 9my $delimited_cap = qr{ <delim=(['"`])> <content=(.*?)> <rdel=\_delim> }xms; 10my $delimited_listcap = qr{ <delim=(['"`])> <content=(.*?)> <[rdel=\_delim]> }xms; 11 12no Regexp::Grammars; 13 14while (my $input = <DATA>) { 15 chomp $input; 16 my $input_copy = $input; 17 my ($input, $expected_outcome) = split /\s*:\s*/, $input; 18 19 if ($expected_outcome eq 'succeed') { 20 ok +($input =~ $delimited) => "Match of $input ${expected_outcome}ed"; 21 is $/{delim}, substr($input,0,1) => "Captured delimiter"; 22 is $/{content}, substr($input,1,-1) => "Captured content"; 23 24 ok +($input =~ $delimited_cap) => "Match and capture of $input ${expected_outcome}ed"; 25 is $/{delim}, substr($input,0,1) => "Captured delimiter"; 26 is $/{content}, substr($input,1,-1) => "Captured content"; 27 is $/{rdel}, substr($input,0,1) => "Captured backreference"; 28 29 ok +($input =~ $delimited_listcap) => "Match and list capture of $input ${expected_outcome}ed"; 30 is $/{delim}, substr($input,0,1) => "Captured delimiter"; 31 is $/{content}, substr($input,1,-1) => "Captured content"; 32 is_deeply $/{rdel}, [substr($input,0,1)] => "Captured backreference"; 33 } 34 else { 35 ok +($input !~ $delimited) => "Match of $input ${expected_outcome}ed"; 36 ok +($input !~ $delimited_cap) => "Match and capture of $input ${expected_outcome}ed"; 37 ok +($input !~ $delimited_listcap) => "Match and list of $input ${expected_outcome}ed"; 38 } 39} 40 41 42__DATA__ 43'a' :succeed 44"abc" :succeed 45`` :succeed 46'abc" :fail 47`abc' :fail 48