mhaines@patru ~/rtx/pshark/cgi-bin/Pshark/AddressParser $ perl -v This is perl, v5.10.0 built for x86_64-linux-thread-multi-ldThe code:
#!/usr/bin/perl
use strict;
my $inner = qr/(?<inner>inner)/xi;
my $tube = qr/(?<tube>tube)/xi;
my $outer1 = qr/(?<donut>$inner)tube/xi; # $+{inner} set, 'keys %+' doesn't have 'inner'
my $outer2 = qr/(?<donut>$inner $tube)/xi; # same here
my $outer3 = qr/(?<donut>$inner) $tube/xi; # finally %+ has all three keys
&test($outer1, "innertube");
&test($outer2, "innertube");
&test($outer3, "innertube");
sub test {
my ($regexp, $string) = @_;
$string =~ $regexp;
print "\n";
print "Regexp: $regexp\n";
print "\tagainst $string\n";
print "Each:\n";
while (my ($k, $v) = each %+) {
print "\t$k = '$v'\n";
}
print "Inner: $+{inner}\n";
print "Tube: $+{tube}\n";
print "1: $1\n";
print "2: $2\n";
print "3: $3\n";
}
And the output:
Regexp: (?ix-sm:(?<donut>(?ix-sm:(?<inner>inner)))tube) against innertube Each: donut = 'inner' Inner: inner Tube: 1: inner 2: inner 3: Regexp: (?ix-sm:(?<donut>(?ix-sm:(?<inner>inner)) (?ix-sm:(?<tube>tube)))) against innertube Each: donut = 'innertube' <-- Hey! What about 'inner'??? Inner: inner Tube: tube 1: innertube 2: inner 3: tube Regexp: (?ix-sm:(?<donut>(?ix-sm:(?<inner>inner))) (?ix-sm:(?<tube>tube))) against innertube Each: inner = 'inner' tube = 'tube' donut = 'inner' Inner: inner Tube: tube 1: inner 2: inner 3: tube
In reply to Bug with nested named capture buffers by matthewshark
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |