use 5.010; # needs: \gn (*SKIP) (*FAIL) use warnings; use strict; use Test::More 'no_plan'; use Test::NoWarnings; # use Data::Dump qw(dd); use constant TEST_VECTOR_SET_1 => ( 'no matches shall be found', [ '' => qw() ], # empty qw() not needed: documentation only [ 'a' => qw() ], [ 'ab' => qw() ], [ 'aba' => qw() ], [ 'abab' => qw() ], [ 'abcba' => qw() ], [ 'aaa' => qw() ], [ 'aaaa' => qw() ], [ 'baaa' => qw() ], [ 'aaab' => qw() ], [ 'baaab' => qw() ], [ 'aaabbb' => qw() ], [ 'world' => qw() ], 'one or more matches shall be found', [ 'aa' => qw(aa) ], [ 'xaa' => qw(aa) ], [ 'aax' => qw(aa) ], [ 'xaax' => qw(aa) ], [ 'aabb' => qw(aa bb) ], [ 'xaabb' => qw(aa bb) ], [ 'aabbx' => qw(aa bb) ], [ 'xaabbx' => qw(aa bb) ], [ 'xaabbx' => qw(aa bb) ], [ 'aaxbb' => qw(aa bb) ], [ 'xaaxbb' => qw(aa bb) ], [ 'aaxbbx' => qw(aa bb) ], [ 'xaaxbbx' => qw(aa bb) ], [ 'aabbcc' => qw(aa bb cc) ], [ 'xaabbcc' => qw(aa bb cc) ], [ 'aabbccx' => qw(aa bb cc) ], [ 'xaabbccx' => qw(aa bb cc) ], [ 'aaxbbcc' => qw(aa bb cc) ], [ 'xaaxbbcc' => qw(aa bb cc) ], [ 'aaxbbccx' => qw(aa bb cc) ], [ 'xaaxbbccx' => qw(aa bb cc) ], [ 'xaaxbbxccx' => qw(aa bb cc) ], [ 'hello' => qw(ll) ], [ 'balloon' => qw(ll oo) ], [ 'subbookkeeper' => qw(bb oo kk ee) ], ); # testing, testing... ############################################## note "\n test basic regexes head-to-head \n\n"; VECTOR: for my $ar_vector (TEST_VECTOR_SET_1) { if (not ref $ar_vector) { # comment string if not vector ref. note $ar_vector; next VECTOR; } my ($string) = @$ar_vector; ok $string =~ /(.)\1((?!\1)|\1*(*SKIP)(*FAIL))/ eq $string =~ / (.) \g-1 (?: \g-1+ (*SKIP)(*FAIL))? /x, qq{'$string'}, ; } # end for VECTOR done_testing(); exit;