1PCRE2(3)              User Contributed Perl Documentation             PCRE2(3)
2
3
4

NAME

6       re::engine::PCRE2 - PCRE2 regular expression engine with jit
7

SYNOPSIS

9           use re::engine::PCRE2;
10
11           if ("Hello, world" =~ /(?<=Hello|Hi), (world)/) {
12               print "Greetings, $1!";
13           }
14

DESCRIPTION

16       Replaces perl's regex engine in a given lexical scope with PCRE2
17       regular expressions provided by libpcre2-8.
18
19       This provides jit support and faster matching, but may fail in corner
20       cases. See pcre2compat
21       <http://www.pcre.org/current/doc/html/pcre2compat.html>.  It is
22       typically 50% faster than the core regex engine. See "BENCHMARKS".
23
24       The goal is to pass the full core re testsuite, identify all
25       problematic patterns and fall-back to the core re engine.  From the
26       1330 core tests, 46 currently fail. 90% of the most popular cpan
27       modules do work fine already. Note that older perl version do fail more
28       regression tests. See "FAILING TESTS".
29
30       Note that some packaged libpcre2-8 libraries do not enable the jit
31       compiler. "CFLAGS=-fPIC cmake -DPCRE2_SUPPORT_JIT=ON; make" PCRE2 then
32       silently falls back to the normal PCRE2 compiler and matcher.
33
34       Check with:
35
36         perl -Mre::engine::PCRE2 -e'print re::engine::PCRE2::JIT'
37

METHODS

39       Since re::engine::PCRE2 derives from the "Regexp" package, you can call
40       compiled "qr//" objects with these methods.  See PCRE2 NATIVE API MATCH
41       CONTEXT FUNCTIONS
42       <http://www.pcre.org/current/doc/html/pcre2api.html#SEC5> and
43       INFORMATION ABOUT A COMPILED PATTERN
44       <http://www.pcre.org/current/doc/html/pcre2api.html#SEC22>.
45
46       With older library versions which do not support a particular info
47       method, undef is returned.  E.g. hasbackslashc and framesize.
48
49       _alloptions (RX)
50           The result of pcre2_pattern_info(PCRE2_INFO_ALLOPTIONS) as unsigned
51           integer.
52
53              my $q=qr/(a)/; print $q->_alloptions
54              => 64
55
56           64 stands for PCRE2_DUPNAMES which is always set. See pcre2.h
57
58       _argoptions (RX)
59           The result of pcre2_pattern_info(PCRE2_INFO_ARGOPTIONS) as unsigned
60           integer.
61
62              my $q=qr/(a)/i; print $q->_argoptions
63              => 72
64
65           72 = 64+8 64 stands for PCRE2_DUPNAMES which is always set.  8 for
66           PCRE2_CASELESS.  See pcre2.h
67
68       backrefmax (RX)
69           Return the number of the highest back reference in the pattern.
70
71             my $q=qr/(a)\1/; print $q->backrefmax
72             => 1
73             my $q=qr/(a)(?(1)a|b)/; print $q->backrefmax
74             => 1
75
76       bsr (RX)
77           What character sequences the "\R" escape sequence matches.  1 means
78           that "\R" matches any Unicode line ending sequence; 2 means that
79           "\R" matches only CR, LF, or CRLF.
80
81       capturecount (RX)
82           Return the highest capturing subpattern number in the pattern. In
83           patterns where "(?|" is not used, this is also the total number of
84           capturing subpatterns.
85
86             my $q=qr/(a(b))/; print $q->capturecount
87             => 2
88
89       firstbitmap (RX)
90           In the absence of a single first code unit for a non-anchored
91           pattern, "pcre2_compile()" may construct a 256-bit table that
92           defines a fixed set of values for the first code unit in any match.
93           For example, a pattern that starts with "[abc]" results in a table
94           with three bits set. When code unit values greater than 255 are
95           supported, the flag bit for 255 means "any code unit of value 255
96           or above". If such a table was constructed, it is returned as
97           string.
98
99       firstcodetype (RX)
100           Return information about the first code unit of any matched string,
101           for a non-anchored pattern. If there is a fixed first value, for
102           example, the letter "c" from a pattern such as "(cat|cow|coyote)",
103           1 is returned, and the character value can be retrieved using
104           "firstcodeunit". If there is no fixed first value, but it is known
105           that a match can occur only at the start of the subject or
106           following a newline in the subject, 2 is returned. Otherwise, and
107           for anchored patterns, 0 is returned.
108
109       firstcodeunit (RX)
110           Return the value of the first code unit of any matched string in
111           the situation where "firstcodetype (RX)" returns 1; otherwise
112           return 0. The value is always less than 256.
113
114             my $q=qr/(cat|cow|coyote)/; print $q->firstcodetype, $q->firstcodeunit
115             => 1 99
116
117       framesize (RX)
118           Undocumented. Only available since pcre-10.24.  Returns undef on
119           older versions.  The pcre2_match() frame size.
120
121       hasbackslashc (RX)
122           Return 1 if the pattern contains any instances of \C, otherwise 0.
123           Note that \C is forbidden since perl 5.26 (?).  With an older pcre2
124           library undef will be returned.
125
126       hascrorlf (RX)
127           Return 1 if the pattern contains any explicit matches for CR or LF
128           characters, otherwise 0. An explicit match is either a literal CR
129           or LF character, or \r or \n.
130
131       heaplimit (RX, [INT])
132           Get or set the backtracking heap limit in a match context.  If the
133           option is not set, build-time 'HEAPLIMIT' option is in effect,
134           which is 20000000.  See "config (OPTION)".  Added only since 10.30,
135           with earlier versions it will return undef.  The setter method is
136           not yet implemented.
137
138       jchanged (RX)
139           Return 1 if the (?J) or (?-J) option setting is used in the
140           pattern, otherwise 0. (?J) and (?-J) set and unset the local
141           PCRE2_DUPNAMES option, respectively.
142
143       jitsize (RX)
144           If the compiled pattern was successfully processed by
145           pcre2_jit_compile(), return the size of the JIT compiled code,
146           otherwise return zero.
147
148       lastcodetype (RX)
149           Returns 1 if there is a rightmost literal code unit that must exist
150           in any matched string, other than at its start. If there is no such
151           value, 0 is returned. When 1 is returned, the code unit value
152           itself can be retrieved using "lastcodeunit (RX)". For anchored
153           patterns, a last literal value is recorded only if it follows
154           something of variable length. For example, for the pattern
155           "/^a\d+z\d+/" the returned value is 1 (with "z" returned from
156           lastcodeunit), but for "/^a\dz\d/" the returned value is 0.
157
158       lastcodeunit (RX)
159           Return the value of the rightmost literal data unit that must exist
160           in any matched string, other than at its start, if such a value has
161           been recorded. If there is no such value, 0 is returned.
162
163       matchempty (RX)
164           Return 1 if the pattern might match an empty string, otherwise 0.
165           When a pattern contains recursive subroutine calls it is not always
166           possible to determine whether or not it can match an empty string.
167           PCRE2 takes a cautious approach and returns 1 in such cases.
168
169       matchlimit (RX, [INT])
170           Get or set the match_limit match context.  Corresponds to the pcre-
171           specific "(*LIMIT_MATCH=nnnn)" option. If the option is not set,
172           build-time 'MATCHLIMIT' option is in effect, which is 10000000.
173           See "config (OPTION)".
174
175       maxlookbehind (RX)
176           Return the number of characters (not code units) in the longest
177           lookbehind assertion in the pattern. This information is useful
178           when doing multi-segment matching using the partial matching
179           facilities. Note that the simple assertions \b and \B require a
180           one-character lookbehind. \A also registers a one-character
181           lookbehind, though it does not actually inspect the previous
182           character. This is to ensure that at least one character from the
183           old segment is retained when a new segment is processed. Otherwise,
184           if there are no lookbehinds in the pattern, \A might match
185           incorrectly at the start of a new segment.
186
187       minlength (RX)
188           If a minimum length for matching subject strings was computed, its
189           value is returned. Otherwise the returned value is 0. The value is
190           a number of characters, which in UTF mode may be different from the
191           number of code units. The value is a lower bound to the length of
192           any matching string. There may not be any strings of that length
193           that do actually match, but every string that does match is at
194           least that long.
195
196       namecount (RX)
197       nameentrysize (RX)
198           PCRE2 supports the use of named as well as numbered capturing
199           parentheses. The names are just an additional way of identifying
200           the parentheses, which still acquire numbers. Several convenience
201           functions such as pcre2_substring_get_byname() are provided for
202           extracting captured substrings by name. It is also possible to
203           extract the data directly, by first converting the name to a number
204           in order to access the correct pointers in the output vector. To do
205           the conversion, you need to use the name-to-number map, which is
206           described by these three values.
207
208           The map consists of a number of fixed-size entries. namecount gives
209           the number of entries, and nameentrysize gives the size of each
210           entry in code units; The entry size depends on the length of the
211           longest name.
212
213           The nametable itself is not yet returned.
214
215       newline (RX, [INT]))
216           Get or set the newline regime.  The default is the build-time
217           'NEWLINE' option, i.e. 2 on non-windows systems.  See "config
218           (OPTION)".  The setter method is not yet implemented.
219
220       recursionlimit (RX, [INT])
221           Get or set a recursion limit, i.e. the pcre specific
222           "(*LIMIT_RECURSION=nnnn)" option.  The default is the build-time
223           'RECURSIONLIMIT' option.  See "config (OPTION)".  The setter method
224           is not yet implemented.
225
226       size (RX)
227           Return the size of the compiled pattern in bytes.  This value
228           includes the size of the general data block that precedes the code
229           units of the compiled pattern itself. The value that is used when
230           "pcre2_compile()" is getting memory in which to place the compiled
231           pattern may be slightly larger than the value returned by this
232           option, because there are cases where the code that calculates the
233           size has to over-estimate. Processing a pattern with the JIT
234           compiler does not alter the value returned by this option.
235

FUNCTIONS

237       import
238           import lexically sets the PCRE2 engine to be active.
239
240           import will later accept compile context options.  See PCRE2 NATIVE
241           API COMPILE CONTEXT FUNCTIONS
242           <http://www.pcre.org/current/doc/html/pcre2api.html#SEC4>.
243
244             bsr            => INT (default: 1)
245             max_pattern_length => INT
246             newline        => INT (default: 2)
247             parenslimit    => INT (default: 250)
248             matchlimit     => INT (default: 10000000)
249             offsetlimit    => INT (default: ?)
250             recursionlimit => INT (default: 10000000) i.e. the depthlimit
251             heaplimit      => INT (default: 20000000) ony since 10.30
252
253       unimport
254           unimport sets the regex engine to the previous one.  If PCRE2 with
255           the previous context options.
256
257       offsetlimit ([INT])
258           Get or set the offset_limit in the match context.  The method is
259           not yet implemented.
260
261       parenslimit ([INT])
262           Get or set the parens_nest_limit in the match context.  The default
263           is the build-time 'PARENSLIMIT' option, 250.  See "config
264           (OPTION)".  The method is not yet implemented.
265
266       ENGINE
267           Returns a pointer to the internal PCRE2 engine, suitable for the XS
268           API "(regexp*)re->engine" field.
269
270       JIT Returns 1 or 0, if the JIT engine is available or not.
271
272       config (OPTION)
273           Returns build-time information about libpcre2.  Note that some of
274           these options may later be set'able at run-time.
275
276           OPTIONS can be one of the following strings:
277
278               JITTARGET
279               UNICODE_VERSION
280               VERSION
281
282               BSR
283               JIT
284               LINKSIZE
285               MATCHLIMIT
286               HEAPLIMIT       (Only since 10.30)
287               NEWLINE
288               PARENSLIMIT
289               DEPTHLIMIT      (Not always defined)
290               RECURSIONLIMIT  (Obsolete synonym for DEPTHLIMIT)
291               STACKRECURSE    (Obsolete. Always 0 in newer libs)
292               UNICODE
293
294           The first three options return a string, the rest an integer.  In
295           case of internal errors, e.g. the new option is not yet supported
296           by libpcre, undef is returned.  See
297           <http://www.pcre.org/current/doc/html/pcre2api.html#SEC17>.
298
299           NEWLINE returns an integer, representing:
300
301              PCRE2_NEWLINE_CR          1
302              PCRE2_NEWLINE_LF          2
303              PCRE2_NEWLINE_CRLF        3
304              PCRE2_NEWLINE_ANY         4  Any Unicode line ending
305              PCRE2_NEWLINE_ANYCRLF     5  Any of CR, LF, or CRLF
306
307           The default is OS specific.
308
309           BSR returns an integer, representing:
310
311              PCRE2_BSR_UNICODE         1
312              PCRE2_BSR_ANYCRLF         2
313
314           A value of PCRE2_BSR_UNICODE means that "\R" matches any Unicode
315           line ending sequence; a value of PCRE2_BSR_ANYCRLF means that "\R"
316           matches only CR, LF, or CRLF.
317
318           The default is 1 for UNICODE, as all libpcre2 libraries are now
319           compiled with unicode support builtin. ("--enable-unicode").
320

BENCHMARKS

322           time perl5.24.1 -Mblib t/perl/regexp.t 10000 >/dev/null
323
324       Without PCRE2:
325
326           34.327s
327
328       With PCRE2:
329
330           17.922s - 50% faster
331

FAILING TESTS

333       About 90% of all core tests and cpan modules do work with
334       re::engine::PCRE2 already, but there are still some unresolved
335       problems.  Esp. when the pattern is not detectable or marked as UTF-8
336       but the subject is, the match will be performed without UTF-8.
337
338       Try the new faster matcher with "export PERL5OPT=-Mre::engine::PCRE2".
339
340       Known problematic popular modules are: Test-Harness-3.38,
341       Params-Util-1.07 t/12_main.t 552-553, 567-568, HTML-Parser-3.72
342       (unicode), DBI-1.636 (EUMM problem), DBD-SQLite-1.54 (xsubpp),
343       Sub-Name-0.21 t/exotic_names.t:105, XML-LibXML-2.0129 (local charset),
344       Module-Install-1.18 unrecognized character after (?  or (?-,
345       Text-CSV_XS-1.28 (unicode), YAML-Syck-1.29, MD5-2.03, XML-Parser-2.44,
346       Module-Build-0.4222, libwww-perl-6.25.
347
348       As of 0.05 the following core regression tests still fail:
349
350           perl -C -Mblib t/perl/regexp.t | grep -a TODO
351
352           # new patterns and pcre2 fails: need to fallback
353           143..146, # \B{gcb} \B{lb} \B{sb} \B{wb}
354           352,      # '^'i:ABC:y:$&:
355           402,      # '(a+|b){0,1}?'i
356           409,      # 'a*'i $&
357           578,      # '(b.)c(?!\N)'s:a
358           654,655,664, # unicode
359           667,      # '[[:^cntrl:]]+'u:a\x80:y:$&:a
360
361           # Pathological patterns that run into run-time PCRE_ERROR_MATCHLIMIT,
362           # even with huge set_match_limit 512mill
363           880 .. 897, # .X(.+)+[X][X]:bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
364
365           # aba =~ ^(a(b)?)+$ and aabbaa =~ ^(aa(bb)?)+$
366           941, # ^(a(b)?)+$:aba:y:-$1-$2-:-a-- => `-a-b-', match=1
367           942, # ^(aa(bb)?)+$:aabbaa:y:-$1-$2-:-aa-- => `-aa-bb-', match=1
368           947, # ^(a\1?){4}$:aaaaaa:y:$1:aa => `', match=
369
370           # empty codeblock
371           1005, #TODO (??{}):x:y:-:- => error `Eval-group not allowed at runtime, use re 'eval' in regex m/(??{})/ at (eval 5663) line 1.'
372
373           # XXX: <<<>>> pattern
374           1096, # ^(<(?:[^<>]+|(?3)|(?1))*>)()(!>!>!>)$:<<!>!>!>><>>!>!>!>:y:$1:<<!>!>!>><>> => `', match=
375           1126, # /^(?'main'<(?:[^<>]+|(?&crap)|(?&main))*>)(?'empty')(?'crap'!>!>!>)$/:<<!>!>!>><>>!>!>!>:yM:$+{main}:<<!>!>!>><>> => `', match=
376
377           # XXX: \R doesn't match an utf8::upgraded \x{85}, we need to
378           # always convert the subject and pattern to utf-8 for these cases
379           # to work
380           1378, # (utf8::upgrade($subject)) foo(\R+)bar:foo\r
381           1380, # (utf8::upgrade($subject)) (\R+)(\V):foo\r
382           1381, # (utf8::upgrade($subject)) foo(\R)bar:foo\x{85}bar:y:$1:\x{85} => `', match=
383           1382, # (utf8::upgrade($subject)) (\V)(\R):foo\x{85}bar:y:$1-$2:o-\x{85} => `�-�', match=1
384           1394, # (utf8::upgrade($subject)) foo(\v+)bar:foo\r
385           1396..1398, # (utf8::upgrade($subject)) (\v+)(\V):foo\r
386           1405,1407..1409, # (utf8::upgrade($subject)) foo(\h+)bar:foo\t\x{A0}bar:y:$1:\t\x{A0} => `', match=
387
388           # regressions in 5.8.x (only) introduced by change 30638
389           1433, # /^\s*i.*?o\s*$/s:io
390
391           1446, #/\N{}\xe4/i:\xc4:y:$&:\xc4 => error `Unknown charname '' is deprecated. Its use will be fatal in Perl 5.28 at (eval 7892) line 2.'
392           1484, # /abc\N {U+41}/x:-:c:-:Missing braces => `-', match=
393           1485, # /abc\N {SPACE}/x:-:c:-:Missing braces => `-', match=
394           1490, # /\N{U+BEEF.BEAD}/:-:c:-: => `-', match=
395
396           1495, # \c`:-:ac:-:\"\\c`\" is more clearly written simply as \"\\ \" => `-', match=
397           1496, # \c1:-:ac:-:\"\\c1\" is more clearly written simply as \"q\" => `-', match=
398
399           1514, # \c?:\x9F:ey:$&:\x9F => `\', match=
400
401           1575, # [\8\9]:\000:Sn:-:- => `-', match=
402           1576, # [\8\9]:-:sc:$&:Unrecognized escape \\8 in character class => `[', match=
403
404           1582, # [\0]:-:sc:-:Need exactly 3 octal digits => `-', match=
405           1584, # [\07]:-:sc:-:Need exactly 3 octal digits => `-', match=
406           1585, # [\07]:7\000:Sn:-:- => `-', match=
407           1586, # [\07]:-:sc:-:Need exactly 3 octal digits => `-', match=
408
409           1599, # /\xe0\pL/i:\xc0a:y:$&:\xc0a => `/', match=
410
411           1618, # ^_?[^\W_0-9]\w\z:\xAA\x{100}:y:$&:\xAA\x{100} => `^', match=
412           1621, # /s/ai:\x{17F}:y:$&:\x{17F} => `/', match=
413
414           1630, # /[^\x{1E9E}]/i:\x{DF}:Sn:-:- => `-', match=
415           1639, # /^\p{L}/:\x{3400}:y:$&:\x{3400} => `�', match=1
416           1642, # /[s\xDF]a/ui:ssa:Sy:$&:ssa => `sa', match=1
417
418           1648, # /ff/i:\x{FB00}\x{FB01}:y:$&:\x{FB00} => `/', match=
419           1649, # /ff/i:\x{FB01}\x{FB00}:y:$&:\x{FB00} => `/', match=
420           1650, # /fi/i:\x{FB01}\x{FB00}:y:$&:\x{FB01} => `/', match=
421           1651, # /fi/i:\x{FB00}\x{FB01}:y:$&:\x{FB01} => `/', match=
422
423           # These test that doesn't cut-off matching too soon in the string for
424           # multi-char folds
425           1669, # /ffiffl/i:abcdef\x{FB03}\x{FB04}:y:$&:\x{FB03}\x{FB04} => `/', match=
426           1670, # /\xdf\xdf/ui:abcdefssss:y:$&:ssss => `/', match=
427           1672, # /st/i:\x{DF}\x{FB05}:y:$&:\x{FB05} => `/', match=
428           1673, # /ssst/i:\x{DF}\x{FB05}:y:$&:\x{DF}\x{FB05} => `/', match=
429           # [perl #101970]
430           1678, # /[[:lower:]]/i:\x{100}:y:$&:\x{100} => `/', match=
431           1679, # /[[:upper:]]/i:\x{101}:y:$&:\x{101} => `/', match=
432           # Was matching 'ss' only and failing the entire match, not seeing the
433           # alternative that would succeed
434           1683, # /s\xDF/ui:\xDFs:y:$&:\xDFs => `/', match=
435           1684, # /sst/ui:s\N{LATIN SMALL LIGATURE ST}:y:$&:s\N{LATIN SMALL LIGATURE ST} => `/', match=
436           1685, # /sst/ui:s\N{LATIN SMALL LIGATURE LONG S T}:y:$&:s\N{LATIN SMALL LIGATURE LONG S T} => `/', match=
437
438           # [perl #111400].  Tests the first Y/N boundary above 255 for each of these.
439           1699, # /[[:alnum:]]/:\x{2c1}:y:-:- => `-', match=
440           1701, # /[[:alpha:]]/:\x{2c1}:y:-:- => `-', match=
441           1703, # /[[:graph:]]/:\x{377}:y:-:- => `-', match=
442           1706, # /[[:lower:]]/:\x{101}:y:-:- => `-', match=
443           1708, # /[[:print:]]/:\x{377}:y:-:- => `-', match=
444           1711, # /[[:punct:]]/:\x{37E}:y:-:- => `-', match=
445           1713, # /[[:upper:]]/:\x{100}:y:-:- => `-', match=
446           1715, # /[[:word:]]/:\x{2c1}:y:-:- => `-', match=
447
448           # $^N, $+ on backtrackracking
449           # BRANCH
450           1739, # ^(.)(?:(..)|B)[CX]:ABCDE:y:$^N-$+:A-A => `-', match=1
451           # TRIE
452           1741, # ^(.)(?:BC(.)|B)[CX]:ABCDE:y:$^N-$+:A-A => `-', match=1
453           # CURLYX
454           1743, # ^(.)(?:(.)+)*[BX]:ABCDE:y:$^N-$+:A-A => `-', match=1
455           # CURLYM
456           1746, # ^(.)(BC)*[BX]:ABCDE:y:$^N-$+:A-A => `-', match=1
457           # CURLYN
458           1749, # ^(.)(B)*.[CX]:ABCDE:y:$^N-$+:A-A => `-', match=1
459
460           # [perl #114220]
461           1793, # (utf8::upgrade($subject)) /[\H]/:\x{BF}:y:$&:\xBF => `�', match=1
462           1794, # (utf8::upgrade($subject)) /[\H]/:\x{A0}:n:-:- => false positive
463           1795, # (utf8::upgrade($subject)) /[\H]/:\x{A1}:y:$&:\xA1 => `�', match=1
464
465           # \W in pattern -> !UTF8: add UTF if subject is UTF8 [#15]
466           1804..1807, # \w:\x{200C}:y:$&:\x{200C} => `\', match=
467           #1805, # \W:\x{200C}:n:-:- => false positive
468           #1806, # \w:\x{200D}:y:$&:\x{200D} => `\', match=
469           #1807, # \W:\x{200D}:n:-:- => false positive
470
471           # again missing UTF [#15]
472           1818..1820, # /^\D{11}/a:\x{10FFFF}\x{10FFFF}\x{10FFFF}\x{10FFFF}\x{10FFFF}\x{10FFFF}\x{10FFFF}\x{10FFFF}\x{10FFFF}\x{10FFFF}:n:-:- => false positive
473           1823, # (utf8::upgrade($subject)) \Vn:\xFFn/:y:$&:\xFFn => `�n', match=1
474           1830, # a?\X:a\x{100}:y:$&:a\x{100} => `a�', match=1
475           1892, # /^\S+=/d:\x{3a3}=\x{3a0}:y:$&:\x{3a3}= => `Σ=', match=1
476           1893, # /^\S+=/u:\x{3a3}=\x{3a0}:y:$&:\x{3a3}= => `Σ=', match=1
477           1936, # /[a-z]/i:\N{KELVIN SIGN}:y:$&:\N{KELVIN SIGN} => `/', match=
478           1937, # /[A-Z]/ia:\N{KELVIN SIGN}:y:$&:\N{KELVIN SIGN} => `/', match=
479           1939, # /[A-Z]/i:\N{LATIN SMALL LETTER LONG S}:y:$&:\N{LATIN SMALL LETTER LONG S} => `/', match=
480
481           1964, # \N(?#comment){SPACE}:A:c:-:Missing braces on \\N{} => `-', match=
482           1983, # /(?xx:[a b])/x:\N{SPACE}:n:-:- => false positive
483           1985, # /(?xx)[a b]/x:\N{SPACE}:n:-:- => false positive
484
485           # [perl #125825]
486           1945, # /(a+){1}+a/:aaa:n:-:- => false positive
487
488           # [perl 128420] recursive matches
489           1976, # aa$|a(?R)a|a:aaa:y:$&:aaa => `a', match=1
490
491       Note that core tests suite also reveals that about a similar number of
492       fails occur with older perls, without PCRE2. Many of them pass with
493       PCRE2.
494
495       Failures in older perls:
496
497           -5.12:  629, 1367 (fatal)
498           -5.10:  40..51, 90..91, 93..94, 96..97, 105, 356, 539,
499                   541, 543, 577, 1360, 1416, 1418, 1456..1457,
500                   1461..1462
501           -5.12:  1448, 1521, 1524, 1577..1578, 1594..1596,
502                   1598, 1674..1675
503           -5.14:  1633..1634
504           -5.16:  871, 1745, 1789, 1816
505           -5.18:  1674..1675, 1856..1857, 1885..1886, 1889
506           -5.20:  138..142
507           -5.22:  139, 1958, 1965
508           -5.24:  1977
509
510       Invalid tests for older perls (fatal):
511
512           -5.14: 1684..1996
513           -5.20: 1896..1996
514           -5.26: 1981..1996
515

AUTHORS

517       Reini Urban <rurban@cpan.org>
518
520       Copyright 2007 Ævar Arnfjörð Bjarmason.  Copyright 2017 Reini Urban.
521
522       The original version was copyright 2006 Audrey Tang <cpan@audreyt.org>
523       and Yves Orton.
524
525       This program is free software; you can redistribute it and/or modify it
526       under the same terms as Perl itself.
527
528
529
530perl v5.30.0                      2019-07-26                          PCRE2(3)
Impressum