);
}
+{
+ my @dot_pairs = (
+ [ '/one/*' => 'two' ],
+ [ '/one/*.*' => 'two.three' ],
+ [ '/**' => 'one/two' ],
+ [ '/**.*' => 'one/two.three' ],
+ );
+
+ foreach my $p (@dot_pairs) {
+ is_deeply(
+ [ $dp->parse($p->[0])->({ PATH_INFO => '/one/two.three' }) ],
+ [ {}, $p->[1] ],
+ "${\$p->[0]} matches /one/two.three and returns ${\$p->[1]}"
+ );
+ }
+}
+
#
# query string
#
[ '?:baz=&:evil=' => { baz => 'one two', evil => '/' } ],
[ '?*' => \%all_single ],
[ '?@*' => \%all_multi ],
- [ '?foo=&@*' => 'FOO', do { my %h = %all_multi; delete $h{foo}; \%h } ],
+ [ '?foo=&@*' => 'FOO', \%all_multi ],
[ '?:foo=&@*' => { %all_multi, foo => 'FOO' } ],
[ '?:@bar=&*' => { %all_single, bar => [ qw(BAR1 BAR2) ] } ],
) {
[ '/foo/bar/+?:baz=&:evil=' => { baz => 'one two', evil => '/' } ],
[ '/foo/bar/+?*' => \%all_single ],
[ '/foo/bar/+?@*' => \%all_multi ],
- [ '/foo/bar/+?foo=&@*' => 'FOO', do { my %h = %all_multi; delete $h{foo}; \%h } ],
+ [ '/foo/bar/+?foo=&@*' => 'FOO', \%all_multi ],
[ '/foo/bar/+?:foo=&@*' => { %all_multi, foo => 'FOO' } ],
[ '/foo/bar/+?:@bar=&*' => { %all_single, bar => [ qw(BAR1 BAR2) ] } ],
) {
[ '/foo/bar+?:baz=&:evil=' => { baz => 'one two', evil => '/' } ],
[ '/foo/bar+?*' => \%all_single ],
[ '/foo/bar+?@*' => \%all_multi ],
- [ '/foo/bar+?foo=&@*' => 'FOO', do { my %h = %all_multi; delete $h{foo}; \%h } ],
+ [ '/foo/bar+?foo=&@*' => 'FOO', \%all_multi ],
[ '/foo/bar+?:foo=&@*' => { %all_multi, foo => 'FOO' } ],
[ '/foo/bar+?:@bar=&*' => { %all_single, bar => [ qw(BAR1 BAR2) ] } ],
) {