RT #118213: handle $r=qr/.../; /$r/p properly

(cherry-picked from 5b0e71e9d506. Some of the new tests are unsuitable for
5.18.x and fail with this commit; they'll be disabled in the next commit)

In the case where a qr// regex is directly used by PMOP (rather than being
interpolated with some other stuff and a new regex created, such as
/a$r/p), then the PMf_KEEPCOPY flag will be set on the PMOP, but the
corresponding RXf_PMf_KEEPCOPY flag *won't* be set on the regex.

Since most of the regex handling for copying the string and extracting out
${^PREMATCH} etc is done based on the RXf_PMf_KEEPCOPY flag in the regex,
this is a bit of a problem.

Prior to 5.18.0 this wasn't so noticeable, since various other bugs around
//p handling meant that ${$PREMATCH} etc often accidentally got set
anyway. 5.18.0 fixed these bugs, and so as a side-effect, exposed the
PMOP verses regex flag issue. In particular, this stopped working in
5.18.0:

    my $pat = qr/a/;
    'aaaa' =~ /$pat/gp or die;
    print "MATCH=[${^MATCH}]\n";

(prints 'a' in 5.16.0, undef in 5.18.0).
The presence /g caused the engine to copy the string anyway by luck.

We can't just set the RXf_PMf_KEEPCOPY flag on the regex if we see the
PMf_KEEPCOPY flag on the PMOP, otherwise stuff like this will be wrong:

    $r = qr/..../;
    /$r/p; 		# set RXf_PMf_KEEPCOPY on $r
    /$r/;		# does a /p match by mistake

Since for 5.19.x onwards COW is enabled by default (and cheap copies are
always made regardless of /p), then this fix is mainly for PERL_NO_COW
builds and for backporting to 5.18.x. (Although it still applies to
strings that can't be COWed for whatever reason).

Since we can't set a flag in the rx, we fix this by:

1) when calling the regex engine (which may attempt to copy part or all of
the capture string), make sure we pass REXEC_COPY_STR, but neither of
REXEC_COPY_SKIP_PRE, REXEC_COPY_SKIP_POST when we call regexec() from
pp_match or pp_subst when the corresponding PMOP has PMf_KEEPCOPY set.

2) in Perl_reg_numbered_buff_fetch() etc, check for PMf_KEEPCOPY in
PL_curpm as well as for RXf_PMf_KEEPCOPY in the current rx before deciding
whether to process ${^PREMATCH} etc.

As well as adding new tests to t/re/reg_pmod.t, I also changed the
string to be matched against from being '12...' to '012...', to ensure that
the lengths of ${^PREMATCH}, ${^MATCH}, ${^POSTMATCH} would all be
different.
Disable new //p tests

The previous commit fixed a regression in 5.18.0:

    my $pat = qr/a/;
    'aaaa' =~ /$pat/gp or die;
    print "MATCH=[${^MATCH}]\n";

which printed 'a' in 5.16.0, and undef in 5.18.0.
5.18.0 only broke the /g behaviour; the non-/g variant was already broken
and the previous commit didn't fix that for maint.

The new tests are testing for the non-/g variant, which still fail, so
disable these tests.

(Getting it to capture under non-/g works in 5.19.2 due to a major
reorganisation of the pp_match/pp_subst/regexec() code, which isn't
suitable for backporting to maint-5.18.)
English.pm: update perl version where perf fixed

It still said that the performance of $`, $&, $' was fixed in 5.18.
Update that to 5.20, since COW wasn't enabled by default in 5.18.

Conflicts:
	lib/English.pm
bump version to v5.18.2
update perldelta for 5.18.2
import Module-CoreList from blead
add the v5.18.2 changes to Module::CoreList
add new CoreList tests to manifest
remove 5.19.7 tentative entries from corelist
For SDBM_File, stop EU::MM from generating its default subdirs rule.

The default subdirs rule creates a race condition with the rule that
Makefile.PL explicitly adds to generate libsdbm.a, which can cause parallel
makes to fail.

Signed-off-by: Chris 'BinGOs' Williams <chris@bingosnet.co.uk>
add tentative 5.18.2 release date
PATCH [perl #119713] Regex \8 and \9 after literals no longer work

Commit 726ee55d introduced a regression that has been fixed in blead by
commit f1e1b256.  However the later commit changed some buggy behavior
into errors instead of warnings, and so is contraindicated in a
maintenance release.  This current commit attempts to fix the regression
without changing other behavior.  It includes the pat.t tests from f1e1b256.
reparse compile-time /(?{})/ in right scope

When a compile-time regex like /...(?{ code-block }) .../
is compiled in the presence of constant and concat overloading,
this can cause (still at compile-time) for the pattern to be evaled and
re-compiled, in order to re-compile any code-blocks that got messed up
during the overloading and thus whose text no longer matches that which
the perl parser previously compiled.

When this happens, eval_sv() happens to be called when the perl parser is
still in compiling state; normally its called from running state.
This tickles an undiscovered bug in Perl_find_runcv_where(), which
finds the current cop sequence by looking at PL_curcop->cop_seq.
At compile time, we need to get it from PL_cop_seqmax instead.

(cherry picked from commit c3923c33af542d8764d5a1e4eb5d7b311f443b89)
[perl #114864] Make UNIVERSAL::DESTROY changes invalidate caches

Commit 8c34e50d inadvertently caused DESTROY caches not to be
reset when UNIVERSAL::DESTROY changes.  Normally, a change to
a method will cause mro_method_changed_in to be called on all
subclasses, but mro.c cheats for UNIVERSAL and just does
++PL_sub_generation.  So clearing the DESTROY cache explicitly
in mro_method_changed_in is clearly not enough.

(cherry picked from commit c716b3beb77406159d18fd52251821fee641f9fc)
File::Glob: Dup glob state in CLONE()

This solves [perl #119897] and [perl #117823], and restores the
behavior of glob() in conjunction with threads of 5.14 and older.

Since 5.16, code that used glob() inside a thread had been
unintentionally sharing state between threads, which lead to things
like this crashing and failing assertions:

./perl -Ilib -Mthreads -e 'scalar glob("*"); threads->create(sub { glob("*") })->join();'

(cherry picked from commit facf34ef484d62d15b2da11ee03d01942a22ff15)
Fix ext/File-Glob/t/threads.t filenames for VMS.

As noted in

http://www.nntp.perl.org/group/perl.perl5.porters/2013/09/msg208134.html

zero-length extensions always get a trailing dot on VMS, and the
easiest workaround is to always use an explicit extension.

(cherry picked from commit 43ed1b742e2b7be9184e1fb35c0f68d15b87feed)
bump File::Glob version for 5.18.2
update perldelta for File::Glob version bump
push back 5.18.2 release date
corelist: push back 5.18.2 release date