This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
force recompiling of regex where closures matter
authorDavid Mitchell <davem@iabyn.com>
Mon, 19 Dec 2011 11:33:07 +0000 (11:33 +0000)
committerDavid Mitchell <davem@iabyn.com>
Wed, 13 Jun 2012 12:32:47 +0000 (13:32 +0100)
commit629cd4f36c79e2b9633bff622171e643c504eaf2
tree9432a65563aafacea53740e62952283f1770d273
parent788ee426f44f4657b1a125e7bd4c2696354d79b1
force recompiling of regex where closures matter

There are some cases where on the second run of a run-time regex, the
text of the pattern hasn't changed, but we should still recompile to
ensure that closure behaviour is correct.

These cases are:

1) run-time code:

    my $code = '(??{$x})';
    for my $x (1..3) {
        $x =~ /$code/; # recompile to see fresh value of $x
    }

2) embedded regexes with code:

    for my $x (1..3) {
my $r = qr/(??{$x})/;
        "A$x" =~ /A$r/; # recompile to see new $r
    }

With this fix, all the TODO tests in re/pat_re_eval.t now pass. (Note that
a couple of those TODO tests were actually broken and are fixed in this
commit)
regcomp.c
t/re/pat_re_eval.t
t/re/reg_eval_scope.t