diff options
Diffstat (limited to 'ext/re/t/re_funcs.t')
-rw-r--r-- | ext/re/t/re_funcs.t | 48 |
1 files changed, 46 insertions, 2 deletions
diff --git a/ext/re/t/re_funcs.t b/ext/re/t/re_funcs.t index f84e2b09a6..736829cbc4 100644 --- a/ext/re/t/re_funcs.t +++ b/ext/re/t/re_funcs.t @@ -13,7 +13,9 @@ BEGIN { use strict; use Test::More; # test count at bottom of file -use re qw(is_regexp regexp_pattern regmust); +use re qw(is_regexp regexp_pattern regmust + regname regnames regnames_count + regnames_iterinit regnames_iternext); my $qr=qr/foo/i; ok(is_regexp($qr),'is_regexp($qr)'); @@ -37,6 +39,48 @@ ok(!regexp_pattern(''),'!regexp_pattern("")'); is($floating,undef,"Regmust anchored - ref"); } + +if ('1234'=~/(?:(?<A>\d)|(?<C>!))(?<B>\d)(?<A>\d)(?<B>\d)/){ + my $qr = qr/(?<foo>foo)(?<bar>bar)/; + my @names = sort +regnames($qr); + is("@names","","regnames"); + @names = sort +regnames($qr,1); + is("@names","bar foo","regnames - all"); + @names = sort +regnames(); + is("@names","A B","regnames"); + @names = sort +regnames(undef,1); + is("@names","A B C","regnames"); + is(join("", @{regname("A",undef,1)}),"13"); + is(join("", @{regname("B",undef,1)}),"24"); + { + if ('foobar'=~/$qr/) { + regnames_iterinit(); + my @res; + while (defined(my $key=regnames_iternext)) { + push @res,$key; + } + @res=sort @res; + is("@res","bar foo"); + is(regnames_count(),2); + } else { + ok(0); ok(0); + } + } + is(regnames_count(),3); + is(regnames_count($qr),2); +} +{ + use warnings; + require re::Tie::Hash::NamedCapture; + my $qr = qr/(?<foo>foo)/; + if ( 'foo' =~ /$qr/ ) { + tie my %hash,"re::Tie::Hash::NamedCapture",re => $qr; + if ('bar'=~/bar/) { + # last successful match is now different + is($hash{foo},'foo'); # prints foo + } + } +} # New tests above this line, don't forget to update the test count below! -use Test::More tests => 12; +use Test::More tests => 23; # No tests here! |