File Coverage

blib/lib/PPR.pm
Criterion Covered Total %
statement 46 49 93.8
branch 4 6 66.6
condition 11 14 78.5
subroutine 16 16 100.0
pod n/a
total 77 85 90.5


line stmt bran cond sub pod time code
1             package PPR;
2              
3 48     48   2717149 use 5.010;
  48         187  
4 48     48   21612 use if $] < 5.018004, re => 'eval';
  48         572  
  48         291  
5              
6             BEGIN {
7 48 50 33 48   5461 if ($] >= 5.020 && $] <= 5.021) {
8 0         0 say {STDERR} <<" END_WARNING"
  0         0  
9             Warning: This program is running under Perl $^V and uses the PPR module.
10             Due to an unresolved issue with compilation of large regexes
11             in this version of Perl, your code is likely to compile
12             extremely slowly (i.e. it may take more than a minute).
13 0         0 PPR is being loaded at ${\join ' line ', (caller 2)[1,2]}.
14             END_WARNING
15             }
16             }
17 48     48   307 use warnings;
  48         110  
  48         1988  
18             our $VERSION = '0.000012';
19 48     48   17447 use utf8;
  48         608  
  48         223  
20              
21             # Class for $PPR::ERROR objects...
22             { package PPR::ERROR;
23              
24 48     48   43680 use overload q{""} => 'source', q{0+} => 'line', fallback => 1;
  48         41999  
  48         289  
25              
26             sub new {
27 3     3   42 my ($class, %obj) = @_;
28 3         78 return bless \%obj, $class;
29             }
30              
31 3     3   20 sub prefix { return shift->{prefix} }
32              
33 3     3   110 sub source { return shift->{source} }
34              
35 7     7   13 sub line { my $self = shift;
36 7   100     30 my $offset = $self->{line} // shift // 1;
      100        
37 7         39 return $offset + $self->{prefix} =~ tr/\n//;
38             }
39              
40 2     2   4 sub origin { my $self = shift;
41 2   50     7 my $line = shift // 0;
42 2   100     8 my $file = shift // "";
43 2         4 return bless { %{$self}, line => $line, file => $file }, ref($self);
  2         54  
44             }
45              
46 3     3   8 sub diagnostic { my $self = shift;
47             my $line = defined $self->{line}
48 3 100       10 ? $self->{line} + $self->{prefix} =~ tr/\n//
49             : 0;
50 3   100     11 my $file = $self->{file} // q{};
51 3 50   1   175 return q{} if eval "no strict;\n"
  1     1   8  
  1     1   2  
  1         45  
  1         6  
  1         1  
  1         34  
  1         6  
  1         2  
  1         40  
52             . "#line $line $file\n"
53             . "sub{ $self->{source} }";
54 3         9 my $diagnostic = $@;
55 3         85 $diagnostic =~ s{ \s*+ \bat \s++ \( eval \s++ \d++ \) \s++ line \s++ 0,
56             | \s*+ \( eval \s++ \d++ \)
57             | \s++ \Z
58             }{}gx;
59 3         16 return $diagnostic;
60             }
61             }
62              
63             # Define the grammar...
64             our $GRAMMAR = qr{
65             (?(DEFINE)
66             (?
67             \x{FEFF}?+ # Optional BOM marker
68             (?>(?&PerlOWS))
69             (?: (?>(?&PerlStatement)) (?&PerlOWS) )*+
70             ) # End of rule
71              
72             (?
73             (?: (?>(?&PerlPod)) (?&PerlOWS) )?+
74             (?>
75             (?: (?>(?&PerlLabel)) (?&PerlOWS) )?+
76             (?: (?>(?&PerlPod)) (?&PerlOWS) )?+
77             (?>
78             (?&PerlKeyword)
79             |
80             # Inlined (?&PerlSubroutineDeclaration)...
81             (?>
82             sub \b (?>(?&PerlOWS))
83             (?>(?&PerlOldQualifiedIdentifier)) (?&PerlOWS)
84             |
85             AUTOLOAD (?&PerlOWS)
86             |
87             DESTROY (?&PerlOWS)
88             )
89             (?:
90             (?>
91             (?&PerlParenthesesList) # Parameter list
92             |
93             \( [^)]*+ \) # Prototype (
94             ) (?&PerlOWS)
95             )?+
96             (?: (?>(?&PerlAttributes)) (?&PerlOWS) )?+
97             (?> ; | (?&PerlBlock) )
98             |
99             # Inlined (?&PerlUseStatement)...
100             (?: use | no ) (?>(?&PerlNWS))
101             (?>
102             (?&PerlVersionNumber)
103             |
104             (?>(?&PerlQualifiedIdentifier))
105             (?: (?>(?&PerlNWS)) (?&PerlVersionNumber)
106             (?! (?>(?&PerlOWS)) (?> (?&PerlInfixBinaryOperator) | (?&PerlComma) | \? ) )
107             )?+
108             (?: (?>(?&PerlNWS)) (?&PerlPod) )?+
109             (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
110             )
111             (?>(?&PerlOWS)) (?> ; | (?= \} | \z ))
112             |
113             # Inlined (?&PerlPackageDeclaration)...
114             package
115             (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
116             (?: (?>(?&PerlNWS)) (?&PerlVersionNumber) )?+
117             (?>(?&PerlOWS)) (?> ; | (?&PerlBlock) | (?= \} | \z ))
118             |
119             (?&PerlControlBlock)
120             |
121             (?&PerlFormat)
122             |
123             (?>(?&PerlExpression)) (?>(?&PerlOWS))
124             (?&PerlStatementModifier)?+ (?>(?&PerlOWS))
125             (?> ; | (?= \} | \z ))
126             |
127             (?&PerlBlock)
128             |
129             ;
130             )
131              
132             | # A yada-yada...
133             \.\.\. (?>(?&PerlOWS))
134             (?> ; | (?= \} | \z ))
135              
136             | # Just a Label...
137             (?>(?&PerlLabel)) (?>(?&PerlOWS))
138             (?> ; | (?= \} | \z ))
139              
140             | # Just an empty statement...
141             (?>(?&PerlOWS)) ;
142              
143             | # An error (report it, if it's the first)...
144             (?(?{ !defined $PPR::ERROR })
145             (?> (?&PerlOWS) )
146             (?! (?: \} | \z ) )
147             (?{ pos() })
148             ( (?&PerlExpression) (?&PerlOWS) [^\n]++ | [^;\}]++ )
149             (?{ $PPR::ERROR //= PPR::ERROR->new(source => $^N, prefix => substr($_, 0, $^R) ) })
150             (?!)
151             )
152             )
153             ) # End of rule
154              
155             (?
156             (?>
157             sub \b (?>(?&PerlOWS))
158             (?>(?&PerlOldQualifiedIdentifier)) (?&PerlOWS)
159             |
160             AUTOLOAD
161             |
162             DESTROY
163             )
164             (?:
165             (?>
166             (?&PerlParenthesesList) # Parameter list
167             |
168             \( [^)]*+ \) # Prototype (
169             ) (?&PerlOWS)
170             )?+
171             (?: (?>(?&PerlAttributes)) (?&PerlOWS) )?+
172             (?> ; | (?&PerlBlock) )
173             ) # End of rule
174              
175             (?
176             (?: use | no ) (?>(?&PerlNWS))
177             (?>
178             (?&PerlVersionNumber)
179             |
180             (?>(?&PerlQualifiedIdentifier))
181             (?: (?>(?&PerlNWS)) (?&PerlVersionNumber)
182             (?! (?>(?&PerlOWS)) (?> (?&PerlInfixBinaryOperator) | (?&PerlComma) | \? ) )
183             )?+
184             (?: (?>(?&PerlNWS)) (?&PerlPod) )?+
185             (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
186             )
187             (?>(?&PerlOWS)) (?> ; | (?= \} | \z ))
188             ) # End of rule
189              
190             (?
191             return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
192             (?>(?&PerlOWS)) (?> ; | (?= \} | \z ))
193             ) # End of rule
194              
195             (?
196             package
197             (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
198             (?: (?>(?&PerlNWS)) (?&PerlVersionNumber) )?+
199             (?>(?&PerlOWS)) (?> ; | (?&PerlBlock) | (?= \} | \z ))
200             ) # End of rule
201              
202             (?
203             (?>(?&PerlLowPrecedenceNotExpression))
204             (?: (?>(?&PerlOWS)) (?>(?&PerlLowPrecedenceInfixOperator))
205             (?>(?&PerlOWS)) (?&PerlLowPrecedenceNotExpression) )*+
206             ) # End of rule
207              
208              
209             (?
210             (?: not \b (?&PerlOWS) )*+ (?&PerlCommaList)
211             ) # End of rule
212              
213             (?
214             (?>(?&PerlAssignment)) (?>(?&PerlOWS))
215             (?:
216             (?: (?>(?&PerlComma)) (?&PerlOWS) )++
217             (?>(?&PerlAssignment)) (?>(?&PerlOWS))
218             )*+
219             (?: (?>(?&PerlComma)) (?&PerlOWS) )*+
220             ) # End of rule
221              
222             (?
223             (?>(?&PerlConditionalExpression))
224             (?:
225             (?>(?&PerlOWS)) (?>(?&PerlAssignmentOperator))
226             (?>(?&PerlOWS)) (?&PerlConditionalExpression)
227             )*+
228             ) # End of rule
229              
230             (?
231             (?
232             (?>(?&PerlBinaryExpression))
233             (?:
234             (?>(?&PerlOWS)) \? (?>(?&PerlOWS)) (?>(?&PerlAssignment))
235             (?>(?&PerlOWS)) : (?>(?&PerlOWS)) (?&PerlConditionalExpression)
236             )?+
237             ) # End of rule
238             ) # End of rule
239              
240             (?
241             (?>(?&PerlPrefixPostfixTerm))
242             (?: (?>(?&PerlOWS)) (?>(?&PerlInfixBinaryOperator))
243             (?>(?&PerlOWS)) (?&PerlPrefixPostfixTerm) )*+
244             ) # End of rule
245              
246             (?
247             (?: (?>(?&PerlPrefixUnaryOperator)) (?&PerlOWS) )*+
248             (?>(?&PerlTerm))
249             (?:
250             (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
251             (?>
252             (?> (?&PerlQualifiedIdentifier) | (?&PerlVariableScalar) )
253             (?: (?>(?&PerlOWS)) (?&PerlParenthesesList) )?+
254              
255             | (?&PerlParenthesesList)
256             | (?&PerlArrayIndexer)
257             | (?&PerlHashIndexer)
258             )
259              
260             (?:
261             (?>(?&PerlOWS))
262             (?>
263             -> (?>(?&PerlOWS))
264             (?> (?&PerlQualifiedIdentifier) | (?&PerlVariableScalar) )
265             (?: (?>(?&PerlOWS)) (?&PerlParenthesesList) )?+
266             |
267             (?: -> (?&PerlOWS) )?+
268             (?> (?&PerlParenthesesList)
269             | (?&PerlArrayIndexer)
270             | (?&PerlHashIndexer)
271             )
272             )
273             )*+
274             (?:
275             (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\@%]
276             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
277             )?+
278             )?+
279             (?: (?>(?&PerlOWS)) (?&PerlPostfixUnaryOperator) )?+
280             ) # End of rule
281              
282             (?
283             (?>
284             \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier)
285             |
286             \( (?>(?&PerlOWS))
287             (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef ) (?>(?&PerlOWS))
288             (?:
289             (?>(?&PerlComma)) (?>(?&PerlOWS))
290             (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef ) (?>(?&PerlOWS))
291             )*+
292             (?: (?>(?&PerlComma)) (?&PerlOWS) )?+
293             \)
294             )
295             ) # End of rule
296              
297             (?
298             (?>
299             # Inlined (?&PerlReturnStatement)...
300             return \b (?>(?&PerlOWS)) (?&PerlExpression)
301             |
302             # Inlined (?&PerlVariableDeclaration)...
303             (?> my | state | our ) \b (?>(?&PerlOWS))
304             (?: (?&PerlQualifiedIdentifier) (?&PerlOWS) )?+
305             (?>(?&PerlLvalue)) (?>(?&PerlOWS))
306             (?&PerlAttributes)?+
307             |
308             (?&PerlAnonymousSubroutine)
309             |
310             (?&PerlVariable)
311             |
312             (?>(?&PerlNullaryBuiltinFunction)) (?! (?>(?&PerlOWS)) \( )
313             |
314             # Inlined (?&PerlDoBlock) and (?&PerlEvalBlock)...
315             (?> do | eval ) (?>(?&PerlOWS)) (?&PerlBlock)
316             |
317             (?&PerlCall)
318             |
319             (?&PerlTypeglob)
320             |
321             (?>(?&PerlParenthesesList))
322             (?: (?>(?&PerlOWS)) (?&PerlArrayIndexer) )?+
323             (?:
324             (?>(?&PerlOWS))
325             (?>
326             (?&PerlArrayIndexer)
327             | (?&PerlHashIndexer)
328             )
329             )*+
330             |
331             (?&PerlAnonymousArray)
332             |
333             (?&PerlAnonymousHash)
334             |
335             (?&PerlDiamondOperator)
336             |
337             (?&PerlContextualMatch)
338             |
339             (?&PerlQuotelikeS)
340             |
341             (?&PerlQuotelikeTR)
342             |
343             (?&PerlQuotelikeQX)
344             |
345             (?&PerlLiteral)
346             )
347             ) # End of rule
348              
349             (?
350             (?> # Conditionals...
351             (?> if | unless ) \b (?>(?&PerlOWS))
352             (?>(?&PerlParenthesesList)) (?>(?&PerlOWS))
353             (?>(?&PerlBlock))
354              
355             (?:
356             (?>(?&PerlOWS))
357             (?: (?>(?&PerlPod)) (?&PerlOWS) )*+
358             elsif \b (?>(?&PerlOWS))
359             (?>(?&PerlParenthesesList)) (?>(?&PerlOWS))
360             (?&PerlBlock)
361             )*+
362              
363             (?:
364             (?>(?&PerlOWS))
365             (?: (?>(?&PerlPod)) (?&PerlOWS) )*+
366             else \b (?>(?&PerlOWS))
367             (?&PerlBlock)
368             )?+
369              
370             | # Loops...
371             (?>
372             for(?:each)?+ \b
373             (?>(?&PerlOWS))
374             (?:
375             (?:
376             (?: \\ (?>(?&PerlOWS)) (?> my | our | state )?+
377             | (?> my | our | state ) (?: (?>(?&PerlOWS)) \\ )?+
378             )?+
379             (?>(?&PerlOWS)) (?&PerlVariableScalar)
380             )?+
381             (?>(?&PerlOWS))
382             (?> (?&PerlParenthesesList) | (?&PerlQuotelikeQW) )
383             |
384             (?&PPR_three_part_list)
385             )
386             |
387             (?> while | until) \b (?>(?&PerlOWS))
388             (?&PerlParenthesesList)
389             )
390              
391             (?>(?&PerlOWS))
392             (?>(?&PerlBlock))
393              
394             (?:
395             (?>(?&PerlOWS)) continue
396             (?>(?&PerlOWS)) (?&PerlBlock)
397             )?+
398              
399             | # Phasers...
400             (?> BEGIN | END | CHECK | INIT | UNITCHECK ) \b (?>(?&PerlOWS))
401             (?&PerlBlock)
402              
403             | # Switches...
404             (?> given | when ) \b (?>(?&PerlOWS))
405             (?>(?&PerlParenthesesList)) (?>(?&PerlOWS))
406             (?&PerlBlock)
407             |
408             default (?>(?&PerlOWS))
409             (?&PerlBlock)
410             )
411             ) # End of rule
412              
413             (?
414             format
415             (?: (?>(?&PerlNWS)) (?&PerlQualifiedIdentifier) )?+
416             (?>(?&PerlOWS)) = [^\n]*+
417             (?&PPR_newline_and_heredoc)
418             (?:
419             (?! \. \n )
420             [^\n\$\@]*+
421             (?:
422             (?>
423             (?= \$ (?! \s ) ) (?&PerlScalarAccessNoSpace)
424             |
425             (?= \@ (?! \s ) ) (?&PerlArrayAccessNoSpace)
426             )
427             [^\n\$\@]*+
428             )*+
429             (?&PPR_newline_and_heredoc)
430             )*+
431             \. (?&PerlEndOfLine)
432             ) # End of rule
433              
434             (?
435             (?> if | for(?:each)?+ | while | unless | until | when )
436             \b
437             (?>(?&PerlOWS))
438             (?&PerlExpression)
439             ) # End of rule
440              
441             (?
442             \{ (?>(?&PerlOWS))
443             (?: (?>(?&PerlStatement)) (?&PerlOWS) )*+
444             (?: (?>(?&PerlPod)) (?&PerlOWS) )?+
445             \}
446             ) # End of rule
447              
448             (?
449             (?>
450             [&] (?>(?&PerlOWS))
451             (?> (?&PerlBlock)
452             | (?&PerlVariableScalar)
453             | (?&PerlQualifiedIdentifier)
454             ) (?>(?&PerlOWS))
455             (?:
456             \( (?>(?&PerlOWS))
457             (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+
458             \)
459             )?+
460             |
461             - (?>(?&PPR_filetest_name)) (?>(?&PerlOWS))
462             (?&PerlPrefixPostfixTerm)?+
463             |
464             (?>(?&PerlBuiltinFunction)) (?>(?&PerlOWS))
465             (?>
466             \( (?>(?&PerlOWS))
467             (?>
468             (?= (?>(?&PPR_non_reserved_identifier))
469             (?>(?&PerlOWS))
470             (?! \( | (?&PerlComma) )
471             )
472             (?&PerlCall)
473             |
474             (?>(?&PerlBlock)) (?>(?&PerlOWS))
475             (?&PerlExpression)?+
476             |
477             (?>(?&PPR_indirect_obj)) (?>(?&PerlNWS))
478             (?&PerlExpression)
479             |
480             (?&PerlExpression)?+
481             ) (?>(?&PerlOWS))
482             \)
483             |
484             (?>
485             (?=
486             (?>(?&PPR_non_reserved_identifier))
487             (?>(?&PerlOWS))
488             (?! \( | (?&PerlComma) )
489             )
490             (?&PerlCall)
491             |
492             (?>(?&PerlBlock)) (?>(?&PerlOWS))
493             (?&PerlCommaList)?+
494             |
495             (?>(?&PPR_indirect_obj)) (?>(?&PerlNWS))
496             (?&PerlCommaList)
497             |
498             (?&PerlCommaList)?+
499             )
500             )
501             |
502             (?>(?&PPR_non_reserved_identifier)) (?>(?&PerlOWS))
503             (?>
504             \( (?>(?&PerlOWS))
505             (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+
506             \)
507             |
508             (?>
509             (?=
510             (?>(?&PPR_non_reserved_identifier))
511             (?>(?&PerlOWS))
512             (?! \( | (?&PerlComma) )
513             )
514             (?&PerlCall)
515             |
516             (?>(?&PerlBlock)) (?>(?&PerlOWS))
517             (?&PerlCommaList)?+
518             |
519             (?>(?&PPR_indirect_obj)) (?&PerlNWS)
520             (?&PerlCommaList)
521             |
522             (?&PerlCommaList)?+
523             )
524             )
525             )
526             ) # End of rule
527              
528             (?
529             (?> my | state | our ) \b (?>(?&PerlOWS))
530             (?: (?&PerlQualifiedIdentifier) (?&PerlOWS) )?+
531             (?>(?&PerlLvalue)) (?>(?&PerlOWS))
532             (?&PerlAttributes)?+
533             ) # End of rule
534              
535             (?
536             do (?>(?&PerlOWS)) (?&PerlBlock)
537             ) # End of rule
538              
539             (?
540             eval (?>(?&PerlOWS)) (?&PerlBlock)
541             ) # End of rule
542              
543             (?
544             :
545             (?>(?&PerlOWS))
546             (?>(?&PerlIdentifier))
547             (?:
548             (?= \( ) (?&PPR_quotelike_body)
549             )?+
550              
551             (?:
552             (?> (?>(?&PerlOWS)) : (?&PerlOWS) | (?&PerlNWS) )
553             (?>(?&PerlIdentifier))
554             (?:
555             (?= \( ) (?&PPR_quotelike_body)
556             )?+
557             )*+
558             ) # End of rule
559              
560             (?
561             (?> (?&PerlParenthesesList) | (?&PerlCommaList) )
562             ) # End of rule
563              
564             (?
565             \( (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+ \)
566             ) # End of rule
567              
568             (?
569             \[ (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+ \]
570             ) # End of rule
571              
572             (?
573             \{ (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+ \}
574             ) # End of rule
575              
576             (?
577             \[ (?>(?&PerlOWS))
578             (?>(?&PerlExpression)) (?>(?&PerlOWS))
579             \]
580             ) # End of rule
581              
582             (?
583             \{ (?>(?&PerlOWS))
584             (?: -?+ (?&PerlIdentifier) | (?&PerlExpression) ) # (Note: MUST allow backtracking here)
585             (?>(?&PerlOWS))
586             \}
587             ) # End of rule
588              
589             (?
590             <<>> # Perl 5.22 "double diamond"
591             |
592             < (?! < )
593             (?>(?&PPR_balanced_angles))
594             >
595             (?=
596             (?>(?&PerlOWS))
597             (?> \z | [,;\}\])?] | => | : (?! :) # (
598             | (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
599             | (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
600             )
601             )
602             ) # End of rule
603              
604             (?
605             (?> , | => )
606             ) # End of rule
607              
608             (?
609             (?> [!\\+~] | \+\+ | -- | - (?! (?&PPR_filetest_name) \b ) )
610             ) # End of rule
611              
612             (?
613             (?> \+\+ | -- )
614             ) # End of rule
615              
616             (?
617             (?> [=!][~=]
618             | cmp
619             | <= >?+
620             | >=
621             | [lg][te]
622             | eq
623             | ne
624             | [+] (?! [+=] )
625             | - (?! [-=] )
626             | [.]{2,3}+
627             | [.%x] (?! [=] )
628             | [&|^][.] (?! [=] )
629             | [<>*&|/]{1,2}+ (?! [=] )
630             | \^ (?! [=] )
631             | ~~
632             )
633             ) # End of rule
634              
635             (?
636             (?: [<>*&|/]{2}
637             | [-+.*/%x]
638             | [&|^][.]?+
639             )?+
640             =
641             (?! > )
642             ) # End of rule
643              
644             (?
645             (?> or | and | xor )
646             ) # End of rule
647              
648             (?
649             sub \b
650             (?>(?&PerlOWS))
651             (?:
652             (?>
653             (?&PerlParenthesesList) # Parameter list
654             |
655             \( [^)]*+ \) # Prototype (
656             )
657             (?&PerlOWS)
658             )?+
659             (?: (?>(?&PerlAttributes)) (?&PerlOWS) )?+
660             (?&PerlBlock)
661             ) # End of rule
662              
663             (?
664             (?= [\$\@%] )
665             (?>
666             (?&PerlScalarAccess)
667             | (?&PerlHashAccess)
668             | (?&PerlArrayAccess)
669             )
670             ) # End of rule
671              
672             (?
673             \*
674             (?>
675             \d++
676             |
677             \^ [][A-Z^_?\\]
678             |
679             \{ \^ [A-Z_] \w*+ \}
680             |
681             (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
682             |
683             (?&PerlVariableScalar)
684             |
685             [][!"#\$%&'()*+,./:;<=>?\@\^`|~-]
686             |
687             (?&PerlBlock)
688             )
689             (?:
690             (?>(?&PerlOWS)) (?: -> (?&PerlOWS) )?+
691             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
692             )*+
693             (?:
694             (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
695             [\@%]
696             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
697             )?+
698             ) # End of rule
699              
700             (?
701             (?>(?&PerlVariableArray))
702             (?:
703             (?>(?&PerlOWS)) (?: -> (?&PerlOWS) )?+
704             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
705             )*+
706             (?:
707             (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
708             [\@%]
709             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
710             )?+
711             ) # End of rule
712              
713             (?
714             (?>(?&PerlVariableArrayNoSpace))
715             (?:
716             (?: -> )?+
717             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
718             )*+
719             (?:
720             ->
721             [\@%]
722             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
723             )?+
724             ) # End of rule
725              
726             (?
727             (?>(?&PerlVariableArray))
728             (?:
729             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
730             )*+
731             ) # End of rule
732              
733             (?
734             (?>(?&PerlVariableHash))
735             (?:
736             (?>(?&PerlOWS)) (?: -> (?&PerlOWS) )?+
737             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
738             )*+
739             (?:
740             (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
741             [\@%]
742             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
743             )?+
744             ) # End of rule
745              
746             (?
747             (?>(?&PerlVariableScalar))
748             (?:
749             (?>(?&PerlOWS))
750             (?:
751             (?:
752             (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
753             (?&PerlParenthesesList)
754             |
755             (?>(?&PerlOWS)) (?: -> (?&PerlOWS) )?+
756             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
757             )
758             (?:
759             (?>(?&PerlOWS)) (?: -> (?&PerlOWS) )?+
760             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
761             )*+
762             )?+
763             (?:
764             (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
765             [\@%]
766             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
767             )?+
768             )?+
769             ) # End of rule
770              
771             (?
772             (?>(?&PerlVariableScalarNoSpace))
773             (?:
774             (?:
775             (?:
776             ->
777             (?&PerlParenthesesList)
778             |
779             (?: -> )?+
780             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
781             )
782             (?:
783             (?: -> )?+
784             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
785             )*+
786             )?+
787             (?:
788             ->
789             [\@%]
790             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
791             )?+
792             )?+
793             ) # End of rule
794              
795             (?
796             (?>(?&PerlVariableScalarNoSpace))
797             (?:
798             (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
799             )*+
800             ) # End of rule
801              
802             (?
803             \$\$
804             (?! [\$\{\w] )
805             |
806             (?:
807             \$
808             (?:
809             [#]
810             (?= (?> [\$^\w\{:+] | - (?! > ) ) )
811             )?+
812             (?&PerlOWS)
813             )++
814             (?>
815             \d++
816             |
817             \^ [][A-Z^_?\\]
818             |
819             \{ \^ [A-Z_] \w*+ \}
820             |
821             (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
822             |
823             :: (?&PerlBlock)
824             |
825             [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
826             |
827             \{ [!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-] \}
828             |
829             \{ \w++ \}
830             |
831             (?&PerlBlock)
832             )
833             |
834             \$\#
835             ) # End of rule
836              
837             (?
838             \$\$
839             (?! [\$\{\w] )
840             |
841             (?:
842             \$
843             (?:
844             [#]
845             (?= (?> [\$^\w\{:+] | - (?! > ) ) )
846             )?+
847             )++
848             (?>
849             \d++
850             |
851             \^ [][A-Z^_?\\]
852             |
853             \{ \^ [A-Z_] \w*+ \}
854             |
855             (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
856             |
857             :: (?&PerlBlock)
858             |
859             [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
860             |
861             \{ \w++ \}
862             |
863             (?&PerlBlock)
864             )
865             |
866             \$\#
867             ) # End of rule
868              
869             (?
870             \@ (?>(?&PerlOWS))
871             (?: \$ (?&PerlOWS) )*+
872             (?>
873             \d++
874             |
875             \^ [][A-Z^_?\\]
876             |
877             \{ \^ [A-Z_] \w*+ \}
878             |
879             (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
880             |
881             :: (?&PerlBlock)
882             |
883             [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
884             |
885             (?&PerlBlock)
886             )
887             ) # End of rule
888              
889             (?
890             \@
891             (?: \$ )*+
892             (?>
893             \d++
894             |
895             \^ [][A-Z^_?\\]
896             |
897             \{ \^ [A-Z_] \w*+ \}
898             |
899             (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
900             |
901             :: (?&PerlBlock)
902             |
903             [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
904             |
905             (?&PerlBlock)
906             )
907             ) # End of rule
908              
909             (?
910             % (?>(?&PerlOWS))
911             (?: \$ (?&PerlOWS) )*+
912             (?>
913             \d++
914             |
915             \^ [][A-Z^_?\\]
916             |
917             \{ \^ [A-Z_] \w*+ \}
918             |
919             (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
920             |
921             :: (?&PerlBlock)?+
922             |
923             [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
924             |
925             (?&PerlBlock)
926             )
927             ) # End of rule
928              
929             (?
930             (?! (?> [msy] | q[wrxq]?+ | tr ) \b )
931             (?>(?&PerlIdentifier))
932             : (?! : )
933             ) # End of rule
934              
935             (?
936             (?> (?&PerlString)
937             | (?&PerlQuotelikeQR)
938             | (?&PerlQuotelikeQW)
939             | (?&PerlNumber)
940             | (?&PerlBareword)
941             )
942             ) # End of rule
943              
944             (?
945             (?>
946             " [^"\\]*+ (?: \\. [^"\\]*+ )*+ "
947             |
948             ' [^'\\]*+ (?: \\. [^'\\]*+ )*+ '
949             |
950             qq \b
951             (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
952             (?&PPR_quotelike_body_interpolated)
953             |
954             q \b
955             (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
956             (?&PPR_quotelike_body)
957             |
958             (?&PerlHeredoc)
959             |
960             (?&PerlVString)
961             )
962             ) # End of rule
963              
964             (?
965             (?> (?&PerlString)
966             | (?&PerlQuotelikeQR)
967             | (?&PerlQuotelikeQW)
968             | (?&PerlQuotelikeQX)
969             | (?&PerlContextualMatch)
970             | (?&PerlQuotelikeS)
971             | (?&PerlQuotelikeTR)
972             )
973             ) # End of rule
974              
975             (?
976             # Match the introducer...
977             <<
978             (?<_heredoc_indented> [~]?+ )
979              
980             # Match the terminator specification...
981             (?>
982             \\?+ (?<_heredoc_terminator> (?&PerlIdentifier) )
983             |
984             (?>(?&PerlOWS))
985             (?>
986             " (?<_heredoc_terminator> [^"\\]*+ (?: \\. [^"\\]*+ )*+ ) "
987             |
988             (? ' )
989             (?<_heredoc_terminator> [^'\\]*+ (?: \\. [^'\\]*+ )*+ ) '
990             |
991             ` (?<_heredoc_terminator> [^`\\]*+ (?: \\. [^`\\]*+ )*+ ) `
992             )
993             |
994             (?<_heredoc_terminator> )
995             )
996              
997             # Do we need to reset the heredoc cache???
998             (?{
999             if ( ($PPR::_heredoc_origin // q{}) ne $_ ) {
1000             %PPR::_heredoc_skip = ();
1001             %PPR::_heredoc_parsed_to = ();
1002             $PPR::_heredoc_origin = $_;
1003             }
1004             })
1005              
1006             # Do we need to cache content lookahead for this heredoc???
1007             (?(?{ my $need_to_lookahead = !$PPR::_heredoc_parsed_to{+pos()};
1008             $PPR::_heredoc_parsed_to{+pos()} = 1;
1009             $need_to_lookahead;
1010             })
1011              
1012             # Lookahead to detect and remember trailing contents of heredoc
1013             (?=
1014             [^\n]*+ \n # Go to the end of the current line
1015             (?{ +pos() }) # Remember the start of the contents
1016             (??{ $PPR::_heredoc_skip{+pos()} // q{} }) # Skip earlier heredoc contents
1017             (?> # The heredoc contents consist of...
1018             (?:
1019             (?!
1020 48     48   75352 (?(?{ $+{_heredoc_indented} }) \h*+ ) # An indent (if it was a <<~)
  48         16986  
  48         1522540  
1021             \g{_heredoc_terminator} # The terminator
1022             (?: \n | \z ) # At an end-of-line
1023             )
1024             (?()
1025             [^\n]*+ \n
1026             |
1027             [^\n\$\@]*+
1028             (?:
1029             (?>
1030             (?{ local $PPR::_heredoc_EOL_start = $^R })
1031             (?= \$ (?! \s ) ) (?&PerlScalarAccessNoSpace)
1032             (?{ $PPR::_heredoc_EOL_start })
1033             |
1034             (?{ local $PPR::_heredoc_EOL_start = $^R })
1035             (?= \@ (?! \s ) ) (?&PerlArrayAccessNoSpace)
1036             (?{ $PPR::_heredoc_EOL_start })
1037             )
1038             [^\n\$\@]*+
1039             )*+
1040             \n (??{ $PPR::_heredoc_skip{+pos()} // q{} })
1041             )
1042             )*+
1043              
1044             (?(?{ $+{_heredoc_indented} }) \h*+ ) # An indent (if it was a <<~)
1045             \g{_heredoc_terminator} # The specified terminator
1046             (?: \n | \z ) # Followed by EOL
1047             )
1048              
1049             # Then memoize the skip for when it's subsequently needed by PerlOWS or PerlNWS...
1050             (?{
1051             $PPR::_heredoc_skip{$^R} = "(?s:.\{" . (pos() - $^R) . "\})";
1052             })
1053             )
1054             )
1055              
1056             ) # End of rule
1057              
1058             (?
1059             (?>
1060             ' [^'\\]*+ (?: \\. [^'\\]*+ )*+ '
1061             |
1062             q \b
1063             (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
1064             (?&PPR_quotelike_body)
1065             )
1066             ) # End of rule
1067              
1068             (?
1069             (?>
1070             " [^"\\]*+ (?: \\. [^"\\]*+ )*+ "
1071             |
1072             qq \b
1073             (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
1074             (?&PPR_quotelike_body_interpolated)
1075             )
1076             ) # End of rule
1077              
1078             (?
1079             (?>
1080             qw \b
1081             (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
1082             (?&PPR_quotelike_body)
1083             )
1084             ) # End of rule
1085              
1086             (?
1087             (?>
1088             ` [^`]*+ (?: \\. [^`]*+ )*+ `
1089             |
1090             qx
1091             (?:
1092             (?&PerlOWS) ' (?&PPR_quotelike_body)
1093             |
1094             \b (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
1095             (?&PPR_quotelike_body_interpolated)
1096             )
1097             )
1098             ) # End of rule
1099              
1100             (?
1101             (?
1102             s \b
1103             (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
1104             (?>
1105             # Hashed syntax...
1106             (?= [#] )
1107             (?>(?&PPR_quotelike_body_interpolated_unclosed))
1108             (?&PPR_quotelike_s_e_check)
1109             (?>(?&PPR_quotelike_body_interpolated))
1110             |
1111             # Bracketed syntax...
1112             (?= (?>(?&PerlOWS)) [\[(<\{] ) # )
1113             (?>(?&PPR_quotelike_body_interpolated))
1114             (?>(?&PerlOWS))
1115             (?&PPR_quotelike_s_e_check)
1116             (?>(?&PPR_quotelike_body_interpolated))
1117             |
1118             # Delimited syntax...
1119             (?>(?&PPR_quotelike_body_interpolated_unclosed))
1120             (?&PPR_quotelike_s_e_check)
1121             (?>(?&PPR_quotelike_body_interpolated))
1122             )
1123             [msixpodualgcern]*+
1124             ) # End of rule
1125             ) # End of rule
1126              
1127             (?
1128             (?
1129             (?> tr | y ) \b
1130             (?! (?>(?&PerlOWS)) => )
1131             (?>
1132             # Hashed syntax...
1133             (?= [#] )
1134             (?>(?&PPR_quotelike_body_interpolated_unclosed))
1135             (?&PPR_quotelike_body_interpolated)
1136             |
1137             # Bracketed syntax...
1138             (?= (?>(?&PerlOWS)) [\[(<\{] ) # )
1139             (?>(?&PPR_quotelike_body_interpolated))
1140             (?>(?&PerlOWS))
1141             (?&PPR_quotelike_body_interpolated)
1142             |
1143             # Delimited syntax...
1144             (?>(?&PPR_quotelike_body_interpolated_unclosed))
1145             (?&PPR_quotelike_body_interpolated)
1146             )
1147             [cdsr]*+
1148             ) # End of rule
1149             ) # End of rule
1150              
1151             (?
1152             (?
1153             (?
1154             (?
1155             (?>
1156             \/\/
1157             |
1158             (?>
1159             m (?= [#] )
1160             |
1161             m \b
1162             (?! (?>(?&PerlOWS)) => )
1163             |
1164             (?= \/ [^/] )
1165             )
1166             (?&PPR_quotelike_body_interpolated)
1167             )
1168             [msixpodualgcn]*+
1169             ) # End of rule
1170             ) # End of rule
1171             (?=
1172             (?>(?&PerlOWS))
1173             (?> \z | [,;\}\])?] | => | : (?! :)
1174             | (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
1175             | (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
1176             )
1177             )
1178             ) # End of rule
1179             ) # End of rule
1180              
1181             (?
1182             qr \b
1183             (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
1184             (?>(?&PPR_quotelike_body_interpolated))
1185             [msixpodualn]*+
1186             ) # End of rule
1187              
1188             (?
1189             (?>
1190             (?&PerlMatch)
1191             |
1192             (?&PerlQuotelikeQR)
1193             )
1194             ) # End of rule
1195              
1196             (?
1197             (?>
1198             (?&PerlContextualMatch)
1199             |
1200             (?&PerlQuotelikeQR)
1201             )
1202             ) # End of rule
1203              
1204              
1205             (?
1206             # Optimized to match any Perl builtin name, without backtracking...
1207             (?=[^\W\d]) # Skip if possible
1208             (?>
1209             s(?>e(?>t(?>(?>(?>(?>hos|ne)t|gr)en|s(?>erven|ockop))t|p(?>r(?>iority|otoent)|went|grp))|m(?>ctl|get|op)|ek(?>dir)?|lect|nd)|y(?>s(?>write|call|open|read|seek|tem)|mlink)|h(?>m(?>write|read|ctl|get)|utdown|ift)|o(?>cket(?>pair)?|rt)|p(?>li(?>ce|t)|rintf)|(?>cala|ubst)r|t(?>ate?|udy)|leep|rand|qrt|ay|in)
1210             | g(?>et(?>p(?>r(?>oto(?>byn(?>umber|ame)|ent)|iority)|w(?>ent|nam|uid)|eername|grp|pid)|s(?>erv(?>by(?>name|port)|ent)|ock(?>name|opt))|host(?>by(?>addr|name)|ent)|net(?>by(?>addr|name)|ent)|gr(?>ent|gid|nam)|login|c)|mtime|lob|oto|rep)
1211             | r(?>e(?>ad(?>lin[ek]|pipe|dir)?|(?>quir|vers|nam)e|winddir|turn|set|cv|do|f)|index|mdir|and)
1212             | c(?>h(?>o(?>m?p|wn)|r(?>oot)?|dir|mod)|o(?>n(?>tinue|nect)|s)|lose(?>dir)?|aller|rypt)
1213             | e(?>nd(?>(?>hos|ne)t|p(?>roto|w)|serv|gr)ent|x(?>i(?>sts|t)|ec|p)|ach|val(?>bytes)?+|of)
1214             | l(?>o(?>c(?>al(?>time)?|k)|g)|i(?>sten|nk)|(?>sta|as)t|c(?>first)?|ength)
1215             | u(?>n(?>(?>lin|pac)k|shift|def|tie)|c(?>first)?|mask|time)
1216             | p(?>r(?>ototype|intf?)|ack(?>age)?|o[ps]|ipe|ush)
1217             | d(?>bm(?>close|open)|e(?>fined|lete)|ump|ie|o)
1218             | f(?>or(?>m(?>line|at)|k)|ileno|cntl|c|lock)
1219             | t(?>i(?>mes?|ed?)|ell(?>dir)?|runcate)
1220             | w(?>a(?>it(?>pid)?|ntarray|rn)|rite)
1221             | m(?>sg(?>ctl|get|rcv|snd)|kdir|ap)
1222             | b(?>in(?>mode|d)|less|reak)
1223             | i(?>n(?>dex|t)|mport|octl)
1224             | a(?>ccept|larm|tan2|bs)
1225             | o(?>pen(?>dir)?|ct|rd)
1226             | v(?>alues|ec)
1227             | k(?>eys|ill)
1228             | quotemeta
1229             | join
1230             | next
1231             | hex
1232             | _
1233             )
1234             \b
1235             ) # End of rule
1236              
1237             (?
1238             # Optimized to match any Perl builtin name, without backtracking...
1239             (?= [^\W\d] ) # Skip if possible
1240             (?>
1241             get(?:(?:(?:hos|ne)t|serv|gr)ent|p(?:(?:roto|w)ent|pid)|login)
1242             | end(?:(?:hos|ne)t|p(?:roto|w)|serv|gr)ent
1243             | wa(?:ntarray|it)
1244             | times?
1245             | fork
1246             | _
1247             )
1248             \b
1249             ) # End of rule
1250              
1251             (?
1252             (?>
1253             (?&PerlVString)
1254             |
1255             (?>(?&PPR_digit_seq))
1256             (?: \. (?&PPR_digit_seq)?+ )*+
1257             )
1258             ) # End of rule
1259              
1260             (?
1261             v (?>(?&PPR_digit_seq)) (?: \. (?&PPR_digit_seq) )*+
1262             ) # End of rule
1263              
1264             (?
1265             [+-]?+
1266             (?>
1267             0 (?> x (?&PPR_x_digit_seq)
1268             | b (?&PPR_b_digit_seq)
1269             | (?&PPR_o_digit_seq)
1270             )
1271             |
1272             (?>
1273             (?>(?&PPR_digit_seq))
1274             (?: \. (?&PPR_digit_seq)?+ )?+
1275             |
1276             \. (?&PPR_digit_seq)
1277             )
1278             (?: [eE] [+-]?+ (?&PPR_digit_seq) )?+
1279             )
1280             ) # End of rule
1281              
1282             (?
1283             (?> (?> :: | ' ) \w++ | [^\W\d]\w*+ ) (?: (?> :: | ' ) \w++ )*+
1284             ) # End of rule
1285              
1286             (?
1287             (?> :: \w++ | [^\W\d]\w*+ ) (?: (?> :: | ' ) \w++ )*+
1288             ) # End of rule
1289              
1290             (?
1291             [^\W\d]\w*+
1292             ) # End of rule
1293              
1294             (?
1295             (?! (?> (?= \w )
1296             (?> for(?:each)?+ | while | if | unless | until | use | no | given | when | sub | return )
1297             | (?&PPR_named_op)
1298             | __ (?> END | DATA ) __ (?&PerlEndOfLine)
1299             ) \b
1300             (?! (?>(?&PerlOWS)) => )
1301             )
1302             (?! (?> q[qwrx]?+ | [mys] | tr ) \b
1303             (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
1304             )
1305             (?: :: )?+
1306             [^\W\d]\w*+
1307             (?: (?: :: | ' ) [^\W\d]\w*+ )*+
1308             (?: :: )?+
1309             (?! \( ) # )
1310             |
1311             :: (?! \w | \{ )
1312             ) # End of rule
1313              
1314             (?
1315             (?!) # None, by default, but can be overridden in a composing regex
1316             ) # End of rule
1317              
1318             (?
1319             ^ = [^\W\d]\w*+ # A line starting with =
1320             .*? # Up to the first...
1321             ^ = cut \b [^\n]*+ $ # ...line starting with =cut
1322             ) # End of rule
1323              
1324              
1325             ##### Whitespace matching (part of API) #################################
1326              
1327             (?
1328             (?:
1329             \h++
1330             |
1331             (?&PPR_newline_and_heredoc)
1332             |
1333             [#] [^\n]*+
1334             |
1335             __ (?> END | DATA ) __ \b .*+ \z
1336             )*+
1337             ) # End of rule
1338              
1339             (?
1340             (?:
1341             \h++
1342             |
1343             (?&PPR_newline_and_heredoc)
1344             |
1345             [#] [^\n]*+
1346             |
1347             __ (?> END | DATA ) __ \b .*+ \z
1348             )++
1349             ) # End of rule
1350              
1351             (?
1352             \n
1353             ) # End of rule
1354              
1355              
1356             ###### Internal components (not part of API) ##########################
1357              
1358             (?
1359             (?> cmp
1360             | [lg][te]
1361             | eq
1362             | ne
1363             | and
1364             | or
1365             | xor
1366             )
1367             )
1368              
1369             (?
1370             (?! (?>
1371             for(?:each)?+ | while | if | unless | until | given | when | default
1372             | sub | format | use | no
1373             | (?&PPR_named_op)
1374             | [msy] | q[wrxq]?+ | tr
1375             | __ (?> END | DATA ) __ \n
1376             )
1377             \b
1378             )
1379             (?>(?&PerlQualifiedIdentifier))
1380             (?! :: )
1381             )
1382              
1383             (?
1384             \( (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
1385             ; (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
1386             ; (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
1387             \)
1388             )
1389              
1390             (?
1391             (?&PerlBareword)
1392             |
1393             (?>(?&PerlVariableScalar))
1394             (?! (?>(?&PerlOWS)) (?> [<\[\{] | -> ) )
1395             )
1396              
1397             (?
1398             (?>(?&PPR_quotelike_body_unclosed))
1399             \S # (Note: Don't have to test that this matches; the preceding subrule already did that)
1400             )
1401              
1402             (?
1403             [^)(\\\n]*+
1404             (?:
1405             (?>
1406             \\.
1407             |
1408             \( (?>(?&PPR_balanced_parens)) \)
1409             |
1410             (?&PPR_newline_and_heredoc)
1411             )
1412             [^)(\\\n]*+
1413             )*+
1414             )
1415              
1416             (?
1417             [^\}\{\\\n]*+
1418             (?:
1419             (?>
1420             \\.
1421             |
1422             \{ (?>(?&PPR_balanced_curlies)) \}
1423             |
1424             (?&PPR_newline_and_heredoc)
1425             )
1426             [^\}\{\\\n]*+
1427             )*+
1428             )
1429              
1430             (?
1431             [^][\\\n]*+
1432             (?:
1433             (?>
1434             \\.
1435             |
1436             \[ (?>(?&PPR_balanced_squares)) \]
1437             |
1438             (?&PPR_newline_and_heredoc)
1439             )
1440             [^][\\\n]*+
1441             )*+
1442             )
1443              
1444             (?
1445             [^><\\\n]*+
1446             (?:
1447             (?>
1448             \\.
1449             |
1450             < (?>(?&PPR_balanced_angles)) >
1451             |
1452             (?&PPR_newline_and_heredoc)
1453             )
1454             [^><\\\n]*+
1455             )*+
1456             )
1457              
1458             (?
1459             (?>
1460             [#]
1461             [^#\\\n]*+
1462             (?:
1463             (?: \\. | (?&PPR_newline_and_heredoc) )
1464             [^#\\\n]*+
1465             )*+
1466             (?= [#] )
1467             |
1468             (?>(?&PerlOWS))
1469             (?>
1470             \{ (?>(?&PPR_balanced_curlies)) (?= \} )
1471             |
1472             \[ (?>(?&PPR_balanced_squares)) (?= \] )
1473             |
1474             \( (?>(?&PPR_balanced_parens)) (?= \) )
1475             |
1476             < (?>(?&PPR_balanced_angles)) (?= > )
1477             |
1478             \\
1479             [^\\\n]*+
1480             (
1481             (?&PPR_newline_and_heredoc)
1482             [^\\\n]*+
1483             )*+
1484             (?= \\ )
1485             |
1486             /
1487             [^\\/\n]*+
1488             (?:
1489             (?: \\. | (?&PPR_newline_and_heredoc) )
1490             [^\\/\n]*+
1491             )*+
1492             (?= / )
1493             |
1494             (? \S )
1495             (?:
1496             \\.
1497             |
1498             (?&PPR_newline_and_heredoc)
1499             |
1500             (?! \g{PPR_qldel} ) .
1501             )*+
1502             (?= \g{PPR_qldel} )
1503             )
1504             )
1505             )
1506              
1507             (?
1508             (?>(?&PPR_quotelike_body_interpolated_unclosed))
1509             \S # (Note: Don't have to test that this matches; the preceding subrule already did that)
1510             )
1511              
1512             (?
1513             [^)(\\\n\$\@]*+
1514             (?:
1515             (?>
1516             \\.
1517             |
1518             \( (?>(?&PPR_balanced_parens_interpolated)) \)
1519             |
1520             (?&PPR_newline_and_heredoc)
1521             |
1522             (?= \$ (?! [\s\)] ) ) (?&PerlScalarAccessNoSpace)
1523             |
1524             (?= \@ (?! [\s\)] ) ) (?&PerlArrayAccessNoSpace)
1525             |
1526             [\$\@]
1527             )
1528             [^)(\\\n\$\@]*+
1529             )*+
1530             )
1531              
1532             (?
1533             [^\}\{\\\n\$\@]*+
1534             (?:
1535             (?>
1536             \\.
1537             |
1538             \{ (?>(?&PPR_balanced_curlies_interpolated)) \}
1539             |
1540             (?&PPR_newline_and_heredoc)
1541             |
1542             (?= \$ (?! [\s\}] ) ) (?&PerlScalarAccessNoSpace)
1543             |
1544             (?= \@ (?! [\s\}] ) ) (?&PerlArrayAccessNoSpace)
1545             |
1546             [\$\@]
1547             )
1548             [^\}\{\\\n\$\@]*+
1549             )*+
1550             )
1551              
1552             (?
1553             [^][\\\n\$\@]*+
1554             (?:
1555             (?>
1556             \\.
1557             |
1558             \[ (?>(?&PPR_balanced_squares_interpolated)) \]
1559             |
1560             (?&PPR_newline_and_heredoc)
1561             |
1562             (?= \$ (?! [\s\]] ) ) (?&PerlScalarAccessNoSpace)
1563             |
1564             (?= \@ (?! [\s\]] ) ) (?&PerlArrayAccessNoSpace)
1565             |
1566             [\$\@]
1567             )
1568             [^][\\\n\$\@]*+
1569             )*+
1570             )
1571              
1572             (?
1573             [^><\\\n\$\@]*+
1574             (?:
1575             (?>
1576             \\.
1577             |
1578             < (?>(?&PPR_balanced_angles_interpolated)) >
1579             |
1580             (?&PPR_newline_and_heredoc)
1581             |
1582             (?= \$ (?! [\s>] ) ) (?&PerlScalarAccessNoSpace)
1583             |
1584             (?= \@ (?! [\s>] ) ) (?&PerlArrayAccessNoSpace)
1585             |
1586             [\$\@]
1587             )
1588             [^><\\\n\$\@]*+
1589             )*+
1590             )
1591              
1592             (?
1593             # Start by working out where it actually ends (ignoring interpolations)...
1594             (?=
1595             (?>
1596             [#]
1597             [^#\\\n\$\@]*+
1598             (?:
1599             (?>
1600             \\.
1601             |
1602             (?&PPR_newline_and_heredoc)
1603             |
1604             (?= \$ (?! [\s#] ) ) (?&PerlScalarAccessNoSpace)
1605             |
1606             (?= \@ (?! [\s#] ) ) (?&PerlArrayAccessNoSpace)
1607             |
1608             [\$\@]
1609             )
1610             [^#\\\n\$\@]*+
1611             )*+
1612             (?= [#] )
1613             |
1614             (?>(?&PerlOWS))
1615             (?>
1616             \{ (?>(?&PPR_balanced_curlies_interpolated)) (?= \} )
1617             |
1618             \[ (?>(?&PPR_balanced_squares_interpolated)) (?= \] )
1619             |
1620             \( (?>(?&PPR_balanced_parens_interpolated)) (?= \) )
1621             |
1622             < (?>(?&PPR_balanced_angles_interpolated)) (?= > )
1623             |
1624             \\
1625             [^\\\n\$\@]*+
1626             (?:
1627             (?>
1628             (?&PPR_newline_and_heredoc)
1629             |
1630             (?= \$ (?! [\s\\] ) ) (?&PerlScalarAccessNoSpace)
1631             |
1632             (?= \@ (?! [\s\\] ) ) (?&PerlArrayAccessNoSpace)
1633             |
1634             [\$\@]
1635             )
1636             [^\\\n\$\@]*+
1637             )*+
1638             (?= \\ )
1639             |
1640             /
1641             [^\\/\n\$\@]*+
1642             (?:
1643             (?>
1644             \\.
1645             |
1646             (?&PPR_newline_and_heredoc)
1647             |
1648             (?= \$ (?! [\s/] ) ) (?&PerlScalarAccessNoSpace)
1649             |
1650             (?= \@ (?! [\s/] ) ) (?&PerlArrayAccessNoSpace)
1651             |
1652             [\$\@]
1653             )
1654             [^\\/\n\$\@]*+
1655             )*+
1656             (?= / )
1657             |
1658             -
1659             (?:
1660             \\.
1661             |
1662             (?&PPR_newline_and_heredoc)
1663             |
1664             (?:
1665             (?= \$ (?! [\s-] ) ) (?&PerlScalarAccessNoSpaceNoArrow)
1666             |
1667             (?= \@ (?! [\s-] ) ) (?&PerlArrayAccessNoSpaceNoArrow)
1668             |
1669             [^-]
1670             )
1671             )*+
1672             (?= - )
1673             |
1674             (? \S )
1675             (?:
1676             \\.
1677             |
1678             (?&PPR_newline_and_heredoc)
1679             |
1680             (?! \g{PPR_qldel} )
1681             (?:
1682             (?= \$ (?! \g{PPR_qldel} | \s ) ) (?&PerlScalarAccessNoSpace)
1683             |
1684             (?= \@ (?! \g{PPR_qldel} | \s ) ) (?&PerlArrayAccessNoSpace)
1685             |
1686             .
1687             )
1688             )*+
1689             (?= \g{PPR_qldel} )
1690             )
1691             )
1692             )
1693              
1694             (?&PPR_quotelike_body_unclosed)
1695             )
1696              
1697             (?
1698             (??{ local $PPR::_quotelike_s_end = -1; '' })
1699             (?:
1700             (?=
1701             (?&PPR_quotelike_body_interpolated)
1702             (??{ $PPR::_quotelike_s_end = +pos(); '' })
1703             [msixpodualgcrn]*+ e [msixpodualgcern]*+
1704             )
1705             (?=
1706             (?(?{ $PPR::_quotelike_s_end >= 0 })
1707             (?>
1708             (??{ +pos() && +pos() < $PPR::_quotelike_s_end ? '' : '(?!)' })
1709             (?>
1710             (?&PerlVariable)
1711             |
1712             (?&PerlQuotelike)
1713             |
1714             \\?+ .
1715             )
1716             )*+
1717             )
1718             )
1719             )?+
1720             )
1721              
1722             (? [ABCMORSTWXbcdefgkloprstuwxz] )
1723              
1724             (? \d++ (?: _?+ \d++ )*+ )
1725             (? [\da-fA-F]++ (?: _?+ [\da-fA-F]++ )*+ )
1726             (? [0-7]++ (?: _?+ [0-7]++ )*+ )
1727             (? [0-1]++ (?: _?+ [0-1]++ )*+ )
1728              
1729             (?
1730             \n (??{ ($PPR::_heredoc_origin // q{}) eq ($_//q{}) ? ($PPR::_heredoc_skip{+pos()} // q{}) : q{} })
1731             )
1732             )
1733             }xms;
1734              
1735             1; # Magic true value required at end of module
1736              
1737             __END__