=pod Test the C or C method =cut use strict; use feature ':5.10'; use Test::More tests => 25; my @tests = ( sub { cmp_ok shift, 'eq', '', => 'no flags' }, sub { cmp_ok shift, 'eq', '', => '/c' }, sub { cmp_ok shift, 'eq', '' => '/g' }, sub { cmp_ok shift, 'eq', 'i' => '/i' }, sub { cmp_ok shift, 'eq', 'm' => '/m' }, sub { cmp_ok shift, 'eq', '' => '/o' }, sub { cmp_ok shift, 'eq', 's' => '/s' }, sub { cmp_ok shift, 'eq', 'x' => '/x' }, sub { cmp_ok shift, 'eq', 'p' => '/p' }, sub { like $_[0], qr/$_/ => "/$_ in $_[0]" for unpack "(Z)*", "xi" }, sub { like $_[0], qr/$_/ => "/$_ in $_[0]" for unpack "(Z)*", "xs" }, sub { for (unpack "(Z)*", "cgimsxp") { /[cg]/ and next; like $_[0], qr/$_/ => "/$_ in $_[0]" } }, sub { cmp_ok shift, 'eq', '', => '/e' }, sub { for (unpack "(Z)*", "egimsxp") { /[ge]/ and next; like $_[0], qr/$_/ => "/$_ in $_[0]"; } }, sub { cmp_ok shift, 'eq', '' => '??' }, # Leave this as the last ,sub { die "add more tests" } ); use re::engine::Plugin ( exec => sub { my ($re, $str) = @_; my $t = shift @tests; my %mod = $re->mod; my $mod_str = join '', keys %mod; $t->($mod_str); } ); # Provide a pattern that can match to avoid running into regexp # optimizations that won't call exec on C<"" =~ //>; "" =~ /x/; "" =~ /x/cg; # meaningless without /g "" =~ /x/g; "" =~ /x/i; "" =~ /x/m; "" =~ /x/o; "" =~ /x/s; "" =~ /x/x; "" =~ /x/p; "" =~ /x/xi; "" =~ /x/xs; "" =~ /x/cgimosxp; my $_ = ""; $_ =~ s/1/2/e; $_ =~ s/1/2/egimosxp; $_ =~ ??;