Babble v0.090007_01 Perl 5 v5.36.0 x86_64-linux-thread-multi

Status
Fail
From
Andreas J. König (ANDK)
Dist
Babble v0.090007_01
Platform
Perl 5 v5.36.0 x86_64-linux-thread-multi
Date
2022-09-04 20:05:36
ID
f08d5a98-2c8c-11ed-99e9-db6de5deb7e4
This distribution has been tested as part of the CPAN Testers
project, supporting the Perl programming language.  See
http://wiki.cpantesters.org/ for more information or email
questions to cpan-testers-discuss@perl.org


--
Dear Zakariyya Mughal,

This is a computer-generated report for Babble-0.090007_01
on perl 5.36.0, created by CPAN-Reporter-1.2018.

Thank you for uploading your work to CPAN.  However, there was a problem
testing your distribution.

If you think this report is invalid, please consult the CPAN Testers Wiki
for suggestions on how to avoid getting FAIL reports for missing library
or binary dependencies, unsupported operating systems, and so on:

http://wiki.cpantesters.org/wiki/CPANAuthorNotes

Sections of this report:

    * Tester comments
    * Program output
    * Prerequisites
    * Environment and other context

------------------------------
TESTER COMMENTS
------------------------------

Additional comments from tester:

this report is from an automated smoke testing program
and was not reviewed by a human for accuracy

------------------------------
PROGRAM OUTPUT
------------------------------

Output from './Build test':

(?============================)* matches null string many times in regex; marked by <-- HERE in m/(?(DEFINE)

(?<PerlSubroutineDeclaration>(?<PerlWrapperSubroutineDeclaration_001>(?&PerlBabbleInnerMatch)|(?&PerlStdSubroutineDeclaration)))
(?<PerlBabbleInnerMatch>(?<PerlWrapperBabbleInnerMatch_001>((?&PerlStdBabbleInnerMatch))(?================================================================)))
(?<PerlStdBabbleInnerMatch>sub \b (?&PerlOWS) (?&PerlOldQualifiedIdentifier)(?:(?: (?&PerlOWS) (?>(?&PerlAttributes)) )?+(?&PerlOWS) (?&PerlParenthesesList)(?&PerlOWS)|(?&PerlOWS)(?&PerlParenthesesList) (?&PerlOWS)(?: (?>(?&PerlAttributes)) (?&PerlOWS) )?+)(?&PerlBlock))

) (?^umsx:
    (?(DEFINE)

        (?<PerlEntireDocument>   (?<PerlStdEntireDocument>
            \A
            (?&PerlDocument)
            (?:
                \Z
            |
                (?(?===========================)
                    (?>(?&PerlOWSOrEND))  (?=======)  ([^\n]++)
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlDocument>   (?<PerlStdDocument>
            \x{FEFF}?+                      # Optional BOM marker
            (?&PerlStatementSequence)
            (?&PerlOWSOrEND)
    )) # End of rule

        (?<PerlStatementSequence>   (?<PerlStdStatementSequence>
            (?>(?&PerlPodSequence))
            (?:
                (?&PerlStatement)
                (?&PerlPodSequence)
            )*+
    )) # End of rule

        (?<PerlStatement>   (?<PerlStdStatement>
            (?>
                (?>(?&PerlPodSequence))
                (?: (?>(?&PerlLabel)) (?&PerlOWSOrEND) )?+
                (?>(?&PerlPodSequence))
                (?>
                    (?&PerlKeyword)
                |
                    (?&PerlSubroutineDeclaration)
                |
                    (?&PerlUseStatement)
                |
                    (?&PerlPackageDeclaration)
                |
                    (?&PerlControlBlock)
                |
                    (?&PerlFormat)
                |
                    (?>(?&PerlExpression))          (?>(?&PerlOWS))
                    (?&PerlStatementModifier)?+     (?>(?&PerlOWSOrEND))
                    (?> ; | (?= \} | \z ))
                |
                    (?&PerlBlock)
                |
                    ;
                )

            | # A yada-yada...
                \.\.\. (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just a label...
                (?>(?&PerlLabel)) (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just an empty statement...
                (?>(?&PerlOWS)) ;

            | # An error (report it, if it's the first)...
                (?(?===========================)
                    (?> (?&PerlOWS) )
                    (?! (?: \} | \z ) )
                    (?=========)
                    ( (?&PerlExpression) (?&PerlOWS) [^\n]++ | [^;\}]++ )
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlSubroutineDeclaration>   (?<PerlStdSubroutineDeclaration>
        (?>
            (?: (?> my | our | state ) \b      (?>(?&PerlOWS)) )?+
            sub \b                             (?>(?&PerlOWS))
            (?>(?&PerlOldQualifiedIdentifier))    (?&PerlOWS)
        |
            AUTOLOAD                              (?&PerlOWS)
        |
            DESTROY                               (?&PerlOWS)
        )
        (?:
            # Perl pre 5.028
            (?:
                (?>
                    (?&PerlSignature)    # Parameter list
                |
                    \( [^)]*+ \)         # Prototype (
                )
                (?&PerlOWS)
            )?+
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
        |
            # Perl post 5.028
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
        )
        (?> ; | (?&PerlBlock) )
    )) # End of rule

        (?<PerlSignature>   (?<PerlStdSignature>
            \(
                (?>(?&PerlOWS))
                (?&PerlParameterDeclaration)*+
            \)
    )) # End of rule

        (?<PerlParameterDeclaration>   (?<PerlStdParameterDeclaration>
            (?:
                    \$  (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)?+ (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableScalar) (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)   (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableArray) (?>(?&PerlOWS))
            |
                (?&PerlVariableHash)  (?>(?&PerlOWS))
            )
            (?: , (?>(?&PerlOWS))  |  (?= \) ) )     # (
    )) # End of rule


        (?<PerlUseStatement>   (?<PerlStdUseStatement>
        (?: use | no ) (?>(?&PerlNWS))
        (?>
            (?&PerlVersionNumber)
        |
            (?>(?&PerlQualifiedIdentifier))
            (?: (?>(?&PerlNWS)) (?&PerlVersionNumber)
                (?! (?>(?&PerlOWS)) (?> (?&PerlInfixBinaryOperator) | (?&PerlComma) | \? ) )
            )?+
            (?: (?>(?&PerlNWS)) (?&PerlPodSequence) )?+
            (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        )
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlReturnExpression>   (?<PerlStdReturnExpression>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
    )) # End of rule

        (?<PerlReturnStatement>   (?<PerlStdReturnStatement>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlPackageDeclaration>   (?<PerlStdPackageDeclaration>
        package
            (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
        (?: (?>(?&PerlNWS)) (?&PerlVersionNumber) )?+
            (?>(?&PerlOWSOrEND)) (?> ; | (?&PerlBlock) | (?= \} | \z ))
    )) # End of rule

        (?<PerlExpression>   (?<PerlStdExpression>
                                (?>(?&PerlLowPrecedenceNotExpression))
            (?: (?>(?&PerlOWS)) (?>(?&PerlLowPrecedenceInfixOperator))
                (?>(?&PerlOWS))    (?&PerlLowPrecedenceNotExpression)  )*+
    )) # End of rule

        (?<PerlLowPrecedenceNotExpression>   (?<PerlStdLowPrecedenceNotExpression>
            (?: not \b (?&PerlOWS) )*+  (?&PerlCommaList)
    )) # End of rule

        (?<PerlCommaList>   (?<PerlStdCommaList>
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            (?:
                (?: (?>(?&PerlComma))          (?&PerlOWS)   )++
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            )*+
                (?: (?>(?&PerlComma))          (?&PerlOWSOrEND)   )*+
    )) # End of rule

        (?<PerlAssignment>   (?<PerlStdAssignment>
                                (?>(?&PerlConditionalExpression))
            (?:
                (?>(?&PerlOWS)) (?>(?&PerlAssignmentOperator))
                (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )*+
    )) # End of rule

        (?<PerlScalarExpression>   (?<PerlStdScalarExpression>
        (?<PerlConditionalExpression>   (?<PerlStdConditionalExpression>
            (?>(?&PerlBinaryExpression))
            (?:
                (?>(?&PerlOWS)) \? (?>(?&PerlOWS)) (?>(?&PerlAssignment))
                (?>(?&PerlOWS))  : (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )?+
    )) # End of rule
    )) # End of rule

        (?<PerlBinaryExpression>   (?<PerlStdBinaryExpression>
                                (?>(?&PerlPrefixPostfixTerm))
            (?: (?>(?&PerlOWS)) (?>(?&PerlInfixBinaryOperator))
                (?>(?&PerlOWS))    (?&PerlPrefixPostfixTerm) )*+
    )) # End of rule

        (?<PerlPrefixPostfixTerm>   (?<PerlStdPrefixPostfixTerm>
            (?: (?>(?&PerlPrefixUnaryOperator))  (?&PerlOWS) )*+
            (?>(?&PerlTerm))
            (?: (?>(?&PerlOWS)) (?&PerlPostfixUnaryOperator) )?+
    )) # End of rule

        (?<PerlLvalue>   (?<PerlStdLvalue>
            (?>
                \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier)
            |
                \(                                                                     (?>(?&PerlOWS))
                    (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )      (?>(?&PerlOWS))
                    (?:
                        (?>(?&PerlComma))                                              (?>(?&PerlOWS))
                        (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )  (?>(?&PerlOWS))
                    )*+
                    (?: (?>(?&PerlComma)) (?&PerlOWS) )?+
                \)
            )
    )) # End of rule

        (?<PerlTerm>   (?<PerlStdTerm>
            (?>
                (?&PerlReturnExpression)

            # The remaining alternatives can all take postfix dereferencers...
            | (?:
                    (?= \$ )  (?&PerlScalarAccess)
              |
                    (?= \@ )  (?&PerlArrayAccess)
              |
                    (?=  % )  (?&PerlHashAccess)
              |
                    (?&PerlAnonymousSubroutine)
              |
                    (?>(?&PerlNullaryBuiltinFunction))  (?! (?>(?&PerlOWS)) \( )
              |
                    (?&PerlDoBlock) | (?&PerlEvalBlock)
              |
                    (?&PerlCall)
              |
                    (?&PerlVariableDeclaration)
              |
                    (?&PerlTypeglob)
              |
                    (?>(?&PerlParenthesesList))

                    # Can optionally do a [...] lookup straight after the parens,
                    # followd by any number of other look-ups
                    (?:
                        (?>(?&PerlOWS)) (?&PerlArrayIndexer)
                        (?:
                            (?>(?&PerlOWS))
                            (?>
                                (?&PerlArrayIndexer)
                            |   (?&PerlHashIndexer)
                            |   (?&PerlParenthesesList)
                            )
                        )*+
                    )?+
              |
                    (?&PerlAnonymousArray)
              |
                    (?&PerlAnonymousHash)
              |
                    (?&PerlDiamondOperator)
              |
                    (?&PerlContextualMatch)
              |
                    (?&PerlQuotelikeS)
              |
                    (?&PerlQuotelikeTR)
              |
                    (?&PerlQuotelikeQX)
              |
                    (?&PerlLiteral)
              )

              (?: (?&PerlTermPostfixDereference) )?+
            )
    )) # End of rule

        (?<PerlTermPostfixDereference>   (?<PerlStdTermPostfixDereference>
            # Must have at least one arrowed dereference...
            (?:
                (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?>  (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    (?:
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    )*+

                |   # A method call...
                    (?> (?&PerlQualifiedIdentifier) | (?! \$\#\* ) (?&PerlVariableScalar) )
                    (?: (?>(?&PerlOWS)) (?&PerlParenthesesList) )?+

                |   # An array or hash slice or k/v slice
                    # (provided it's not subsequently dereferenced)
                    [\@%] (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS))  [\@%]?+  [\[\{] )

                |   # An array max-index lookup...
                    \$\#\*

                |   # A scalar-, glob-, or subroutine dereference...
                    [\$*&] \*

                |   # An array dereference (provided it's not subsequently dereferenced)...
                    \@\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\[\@] )

                |   # A hash dereference (provided it's not subsequently dereferenced)...
                    \%\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\{%] )

                |   # A glob lookup...
                    \* (?&PerlHashIndexer)
                )
            )++
    )) # End of rule

        (?<PerlControlBlock>   (?<PerlStdControlBlock>
            (?> # Conditionals...
                (?> if | unless ) \b                 (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))          (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    elsif \b                         (?>(?&PerlOWS))
                    (?>(?&PerlParenthesesList))      (?>(?&PerlOWS))
                    (?&PerlBlock)
                )*+

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    else \b                          (?>(?&PerlOWS))
                    (?&PerlBlock)
                )?+

            |   # Loops...
                (?>
                    for(?:each)?+ \b
                    (?>(?&PerlOWS))
                    (?:
                        (?> # Explicitly aliased iterator variable...
                            (?> \\ (?>(?&PerlOWS))  (?> my | our | state )
                            |                       (?> my | our | state )  (?>(?&PerlOWS)) \\
                            )
                            (?>(?&PerlOWS))
                            (?> (?&PerlVariableScalar)
                            |   (?&PerlVariableArray)
                            |   (?&PerlVariableHash)
                            )
                        |
                            # List of scalar iterator variables...
                            my                                   (?>(?&PerlOWS))
                            \(                                   (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                (?: ,                            (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                )*+
                                (?: ,                            (?>(?&PerlOWS)) )?+
                            \)

                        |
                            # Implicitly aliased iterator variable...
                            (?> (?: my | our | state ) (?>(?&PerlOWS)) )?+
                            (?&PerlVariableScalar)
                        )?+
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlQuotelikeQW) )
                    |
                        (?&PPR_X_three_part_list)
                    )
                |
                    (?> while | until) \b (?>(?&PerlOWS))
                    (?&PerlParenthesesList)
                )

                (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                    (?>(?&PerlOWS))   continue
                    (?>(?&PerlOWS))   (?&PerlBlock)
                )?+

            | # Phasers...
                (?> BEGIN | END | CHECK | INIT | UNITCHECK ) \b   (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Try/catch/finallys...
                (?>(?&PerlTryCatchFinallyBlock))

            | # Defers...
                defer                                     (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Switches...
                (?> given | when ) \b                     (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))               (?>(?&PerlOWS))
                (?&PerlBlock)
            |
                default                                   (?>(?&PerlOWS))
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlFormat>   (?<PerlStdFormat>
            format
            (?: (?>(?&PerlNWS))  (?&PerlQualifiedIdentifier)  )?+
                (?>(?&PerlOWS))  = [^\n]*+
                (?&PPR_X_newline_and_heredoc)
            (?:
                (?! \. \n )
                [^\n\$\@]*+
                (?:
                    (?>
                        (?= \$ (?! \s ) )  (?&PerlScalarAccessNoSpace)
                    |
                        (?= \@ (?! \s ) )  (?&PerlArrayAccessNoSpace)
                    )
                    [^\n\$\@]*+
                )*+
                (?&PPR_X_newline_and_heredoc)
            )*+
            \. (?&PerlEndOfLine)
    )) # End of rule

        (?<PerlStatementModifier>   (?<PerlStdStatementModifier>
            (?> if | for(?:each)?+ | while | unless | until | when )
            \b
            (?>(?&PerlOWS))
            (?&PerlExpression)
    )) # End of rule

        (?<PerlBlock>   (?<PerlStdBlock>
            \{  (?>(?&PerlStatementSequence))  \}
    )) # End of rule

        (?<PerlCall>   (?<PerlStdCall>
            (?>
                [&]                                    (?>(?&PerlOWS))
                (?> (?&PerlBlock)
                |   (?&PerlVariableScalar)
                |   (?&PerlQualifiedIdentifier)
                )                                      (?>(?&PerlOWS))
                (?:
                    \(                                 (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))        (?&PerlOWS)   )?+
                    \)
                )?+
            |
                - (?>(?&PPR_X_filetest_name))            (?>(?&PerlOWS))
                (?&PerlPrefixPostfixTerm)?+
            |
                (?>(?&PerlBuiltinFunction))            (?>(?&PerlOWS))
                (?>
                    \(                                 (?>(?&PerlOWS))
                        (?>
                            (?= (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlExpression)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlExpression)
                        |
                            (?&PerlExpression)?+
                        )                              (?>(?&PerlOWS))
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            |
                (?>(?&PPR_X_non_reserved_identifier)) (?>(?&PerlOWS))
                (?>
                    \(                              (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))     (?&PerlOWS)  )?+
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))           (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))        (?&PerlNWS)
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            )
    )) # End of rule

        (?<PerlVariableDeclaration>   (?<PerlStdVariableDeclaration>
            (?> my | our | state ) \b           (?>(?&PerlOWS))
            (?: (?&PerlQualifiedIdentifier)        (?&PerlOWS)  )?+
            (?>(?&PerlLvalue))                  (?>(?&PerlOWS))
            (?&PerlAttributes)?+
    )) # End of rule

        (?<PerlDoBlock>   (?<PerlStdDoBlock>
            do (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlEvalBlock>   (?<PerlStdEvalBlock>
            eval (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlTryCatchFinallyBlock>   (?<PerlStdTryCatchFinallyBlock>

                try \b                                (?>(?&PerlOWS))
                (?>(?&PerlBlock))
                                                      (?>(?&PerlOWS))
                catch \b                              (?>(?&PerlOWS))
                \(  (?>(?&PerlVariableScalar))  \)    (?>(?&PerlOWS))
                (?>(?&PerlBlock))

            (?:
                                                      (?>(?&PerlOWS))
                finally \b                            (?>(?&PerlOWS))
                (?>(?&PerlBlock))
            )?+
    )) # End of rule

        (?<PerlAttributes>   (?<PerlStdAttributes>
            :
            (?>(?&PerlOWS))
            (?>(?&PerlIdentifier))
            (?:
                (?= \( ) (?&PPR_X_quotelike_body)
            )?+

            (?:
                (?> (?>(?&PerlOWS)) : (?&PerlOWS) | (?&PerlNWS) )
                (?>(?&PerlIdentifier))
                (?:
                    (?= \( ) (?&PPR_X_quotelike_body)
                )?+
            )*+
    )) # End of rule

        (?<PerlList>   (?<PerlStdList>
            (?> (?&PerlParenthesesList) | (?&PerlCommaList) )
    )) # End of rule

        (?<PerlParenthesesList>   (?<PerlStdParenthesesList>
            \(  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \)
    )) # End of rule

        (?<PerlAnonymousArray>   (?<PerlStdAnonymousArray>
            \[  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \]
    )) # End of rule

        (?<PerlAnonymousHash>   (?<PerlStdAnonymousHash>
            \{  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+ \}
    )) # End of rule

        (?<PerlArrayIndexer>   (?<PerlStdArrayIndexer>
            \[                          (?>(?&PerlOWS))
                (?>(?&PerlExpression))  (?>(?&PerlOWS))
            \]
    )) # End of rule

        (?<PerlHashIndexer>   (?<PerlStdHashIndexer>
            \{  (?>(?&PerlOWS))
                (?: -?+ (?&PerlIdentifier) | (?&PerlExpression) )  # (Note: MUST allow backtracking here)
                (?>(?&PerlOWS))
            \}
    )) # End of rule

        (?<PerlDiamondOperator>   (?<PerlStdDiamondOperator>
            <<>>    # Perl 5.22 "double diamond"
        |
            < (?! < )
                (?>(?&PPR_X_balanced_angles))
            >
            (?=
                (?>(?&PerlOWSOrEND))
                (?> \z | [,;\}\])?] | => | : (?! :)        # (
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule

        (?<PerlComma>   (?<PerlStdComma>
            (?> , | => )
    )) # End of rule

        (?<PerlPrefixUnaryOperator>   (?<PerlStdPrefixUnaryOperator>
            (?> \+\+ | -- | [!\\+~] | - (?! (?&PPR_X_filetest_name) \b ) )
    )) # End of rule

        (?<PerlPostfixUnaryOperator>   (?<PerlStdPostfixUnaryOperator>
            (?> \+\+  |  -- )
    )) # End of rule

        (?<PerlInfixBinaryOperator>   (?<PerlStdInfixBinaryOperator>
            (?>  [=!][~=]
            |    cmp
            |    <= >?+
            |    >=
            |    [lg][te]
            |    eq
            |    ne
            |    [+]             (?! [+=] )
            |     -              (?! [-=] )
            |    [.]{2,3}+
            |    [.%x]           (?! [=]  )
            |    [&|^][.]        (?! [=]  )
            |    [<>*&|/]{1,2}+  (?! [=]  )
            |    \^              (?! [=]  )
            |    ~~
            |    isa
            )
    )) # End of rule

        (?<PerlAssignmentOperator>   (?<PerlStdAssignmentOperator>
            (?:  [<>*&|/]{2}
            |  [-+.*/%x]
            |  [&|^][.]?+
            )?+
            =
            (?! > )
    )) # End of rule

        (?<PerlLowPrecedenceInfixOperator>   (?<PerlStdLowPrecedenceInfixOperator>
            (?> or | and | xor )
    )) # End of rule

        (?<PerlAnonymousSubroutine>   (?<PerlStdAnonymousSubroutine>
            sub \b
            (?>(?&PerlOWS))
            (?:
                # Perl pre 5.028
                (?:
                    (?>
                        (?&PerlSignature)    # Parameter list
                    |
                        \( [^)]*+ \)         # Prototype (
                    )
                    (?&PerlOWS)
                )?+
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            |
                # Perl post 5.028
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
                (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
            )
            (?&PerlBlock)
    )) # End of rule

        (?<PerlVariable>   (?<PerlStdVariable>
            (?= [\$\@%] )
            (?>
                (?&PerlScalarAccess)
            |   (?&PerlHashAccess)
            |   (?&PerlArrayAccess)
            )
            (?> (?&PerlTermPostfixDereference) )?+
    )) # End of rule

        (?<PerlTypeglob>   (?<PerlStdTypeglob>
            \*
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier))  (?: :: )?+
            |
                (?&PerlVariableScalar)
            |
                [][!"#\$%&'()*+,./:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccess>   (?<PerlStdArrayAccess>
            (?>(?&PerlVariableArray))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccessNoSpace>   (?<PerlStdArrayAccessNoSpace>
            (?>(?&PerlVariableArrayNoSpace))

            # Optional arrowless access(es) to begin
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any number of optional arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlArrayAccessNoSpaceNoArrow>   (?<PerlStdArrayAccessNoSpaceNoArrow>
            (?>(?&PerlVariableArray))
            (?:
                (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
            )*+
    )) # End of rule

        (?<PerlHashAccess>   (?<PerlStdHashAccess>
            (?>(?&PerlVariableHash))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlScalarAccess>   (?<PerlStdScalarAccess>
            (?>(?&PerlVariableScalar))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlScalarAccessNoSpace>   (?<PerlStdScalarAccessNoSpace>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) to begin...
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any nuber of arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlScalarAccessNoSpaceNoArrow>   (?<PerlStdScalarAccessNoSpaceNoArrow>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) (but parens can't be first)...
            (?:
                (?! \( )
                (?:
                    (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlVariableScalar>   (?<PerlStdVariableScalar>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
                (?&PerlOWS)
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ [!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-] \}
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableScalarNoSpace>   (?<PerlStdVariableScalarNoSpace>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableArray>   (?<PerlStdVariableArray>
            \@     (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableArrayNoSpace>   (?<PerlStdVariableArrayNoSpace>
            \@
            (?: \$ )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableHash>   (?<PerlStdVariableHash>
            %      (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)?+
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlLabel>   (?<PerlStdLabel>
            (?! (?> [msy] | q[wrxq]?+ | tr ) \b )
            (?>(?&PerlIdentifier))
            : (?! : )
    )) # End of rule

        (?<PerlLiteral>   (?<PerlStdLiteral>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlNumber)
            |   (?&PerlBareword)
            )
    )) # End of rule

        (?<PerlString>   (?<PerlStdString>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                (?: q \b | qq (?= (?>(?&PerlOWS)) ' ) )
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            |
                qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            |
                (?&PerlHeredoc)
            |
                (?&PerlVString)
            )
    )) # End of rule

        (?<PerlQuotelike>   (?<PerlStdQuotelike>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlQuotelikeQX)
            |   (?&PerlContextualMatch)
            |   (?&PerlQuotelikeS)
            |   (?&PerlQuotelikeTR)
            )
    )) # End of rule

        (?<PerlHeredoc>   (?<PerlStdHeredoc>
            # Match the introducer...
            <<
            (?<_heredoc_indented> [~]?+ )

            # Match the terminator specification...
            (?>
                \\?+   (?<_heredoc_terminator>  (?&PerlIdentifier)              )
            |
                (?>(?&PerlOWS))
                (?>
                    "  (?<_heredoc_terminator>  [^"\\]*+  (?: \\. [^"\\]*+ )*+  )  "  #"
                |
                    (?<PPR_X_HD_nointerp> ' )
                    (?<_heredoc_terminator>  [^'\\]*+  (?: \\. [^'\\]*+ )*+  )  '  #'
                |
                    `  (?<_heredoc_terminator>  [^`\\]*+  (?: \\. [^`\\]*+ )*+  )  `  #`
                )
            |
                    (?<_heredoc_terminator>                                  )
            )

            # Do we need to reset the heredoc cache???
            (?====================================================================================================================================================================================================================================================================)

            # Do we need to cache content lookahead for this heredoc???
            (?(?==============================================================================================================================================================================)

                # Lookahead to detect and remember trailing contents of heredoc
                (?=
                    [^\n]*+ \n                                   # Go to the end of the current line
                    (?==========)                                # Remember the start of the contents
                    (?==========================================)   # Skip earlier heredoc contents
                    (?>                                          # The heredoc contents consist of...
                        (?:
                            (?!
                                (?(?=========================) \h*+ )   # An indent (if it was a <<~)
                                \g{_heredoc_terminator}                 # The terminator
                                (?: \n | \z )                           # At an end-of-line
                            )
                            (?(<PPR_X_HD_nointerp>)
                                [^\n]*+ \n
                            |
                                [^\n\$\@]*+
                                (?:
                                    (?>
                                        (?===========================================)
                                        (?= \$ )  (?&PerlScalarAccess)
                                        (?===============================)
                                    |
                                        (?===========================================)
                                        (?= \@ )  (?&PerlArrayAccess)
                                        (?===============================)
                                    )
                                    [^\n\$\@]*+
                                )*+
                                \n (?==========================================)
                            )
                        )*+

                        (?(?=========================) \h*+ )            # An indent (if it was a <<~)
                        \g{_heredoc_terminator}                          # The specified terminator
                        (?: \n | \z )                                    # Followed by EOL
                    )

                    # Then memoize the skip for when it's subsequently needed by PerlOWS or PerlNWS...
                    (?===============================================================================================================================================================================================================================================================================================================================================================================)
                )
            )

    )) # End of rule

        (?<PerlQuotelikeQ>   (?<PerlStdQuotelikeQ>
            (?>
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                \b q \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQQ>   (?<PerlStdQuotelikeQQ>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                \b qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            )
    )) # End of rule

        (?<PerlQuotelikeQW>   (?<PerlStdQuotelikeQW>
            (?>
                qw \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQX>   (?<PerlStdQuotelikeQX>
            (?>
                `  [^`]*+  (?: \\. [^`]*+ )*+  `
            |
                qx
                    (?>
                        (?= (?>(?&PerlOWS)) ' )
                        (?&PPR_X_quotelike_body)
                    |
                        \b (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                        (?&PPR_X_quotelike_body_interpolated)
                    )
            )
    )) # End of rule

        (?<PerlQuotelikeS>   (?<PerlStdQuotelikeS>
        (?<PerlSubstitution>   (?<PerlStdSubstitution>
            s \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{]                 # )
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_regex_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Single-quoted syntax...
                (?= (?>(?&PerlOWS)) ' )
                (?>(?&PPR_X_regex_body_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Delimited syntax...
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            )
            [msixpodualgcern]*+
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeTR>   (?<PerlStdQuotelikeTR>
        (?<PerlTransliteration>   (?<PerlStdTransliteration>
            (?> tr | y ) \b
            (?! (?>(?&PerlOWS)) => )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{\«]                 # )]
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_quotelike_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Delimited syntax...
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            )
            [cdsr]*+
    )) # End of rule
    )) # End of rule

        (?<PerlContextualQuotelikeM>   (?<PerlStdContextualQuotelikeM>
        (?<PerlContextualMatch>   (?<PerlStdContextualMatch>
            (?<PerlQuotelikeM>
            (?<PerlMatch>
                (?>
                    \/\/
                |
                    (?>
                        m (?= [#] )
                    |
                        m \b
                        (?! (?>(?&PerlOWS)) => )
                    |
                        (?= \/ [^/] )
                    )
                    (?&PPR_X_regex_body_interpolated)
                )
                [msixpodualgcn]*+
            ) # End of rule (?<PerlMatch>)
            ) # End of rule (?<PerlQuotelikeM>)
            (?=
                (?>(?&PerlOWS))
                (?> \z | [,;\}\])?] | => | : (?! :)
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeQR>   (?<PerlStdQuotelikeQR>
            qr \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>(?&PPR_X_regex_body_interpolated))
            [msixpodualn]*+
    )) # End of rule

        (?<PerlRegex>   (?<PerlStdRegex>
            (?>
                (?&PerlMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule

        (?<PerlContextualRegex>   (?<PerlStdContextualRegex>
            (?>
                (?&PerlContextualMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule


        (?<PerlBuiltinFunction>   (?<PerlStdBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?=[^\W\d]) # Skip if possible
            (?>
                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(?>at|udy)|leep|rand|qrt|ay|in)
                | 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)
                | r(?>e(?>ad(?>lin[ek]|pipe|dir)?|(?>quir|vers|nam)e|winddir|turn|set|cv|do|f)|index|mdir|and)
                | c(?>h(?>o(?>m?p|wn)|r(?>oot)?|dir|mod)|o(?>n(?>tinue|nect)|s)|lose(?>dir)?|aller|rypt)
                | e(?>nd(?>(?>hos|ne)t|p(?>roto|w)|serv|gr)ent|x(?>i(?>sts|t)|ec|p)|ach|val(?>bytes)?+|of)
                | l(?>o(?>c(?>al(?>time)?|k)|g)|i(?>sten|nk)|(?>sta|as)t|c(?>first)?|ength)
                | u(?>n(?>(?>lin|pac)k|shift|def|tie)|c(?>first)?|mask|time)
                | p(?>r(?>ototype|intf?)|ack(?>age)?|o[ps]|ipe|ush)
                | d(?>bm(?>close|open)|e(?>fined|lete)|ump|ie|o)
                | f(?>or(?>m(?>line|at)|k)|ileno|cntl|c|lock)
                | t(?>i(?>mes?|ed?)|ell(?>dir)?|runcate)
                | w(?>a(?>it(?>pid)?|ntarray|rn)|rite)
                | m(?>sg(?>ctl|get|rcv|snd)|kdir|ap)
                | b(?>in(?>mode|d)|less|reak)
                | i(?>n(?>dex|t)|mport|octl)
                | a(?>ccept|larm|tan2|bs)
                | o(?>pen(?>dir)?|ct|rd)
                | v(?>alues|ec)
                | k(?>eys|ill)
                | quotemeta
                | join
                | next
                | hex
                | _
            )
            \b
    )) # End of rule

        (?<PerlNullaryBuiltinFunction>   (?<PerlStdNullaryBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?= [^\W\d] )  # Skip if possible
            (?>
                get(?:(?:(?:hos|ne)t|serv|gr)ent|p(?:(?:roto|w)ent|pid)|login)
                | end(?:(?:hos|ne)t|p(?:roto|w)|serv|gr)ent
                | wa(?:ntarray|it)
                | times?
                | fork
                | _
            )
            \b
    )) # End of rule

        (?<PerlVersionNumber>   (?<PerlStdVersionNumber>
            (?>
                (?&PerlVString)
            |
                (?>(?&PPR_X_digit_seq))
                (?: \. (?&PPR_X_digit_seq)?+ )*+
            )
    )) # End of rule

        (?<PerlVString>   (?<PerlStdVString>
            v  (?>(?&PPR_X_digit_seq))  (?: \. (?&PPR_X_digit_seq) )*+
    )) # End of rule

        (?<PerlNumber>   (?<PerlStdNumber>
            [+-]?+
            (?>
                0  (?>  x   (?&PPR_X_x_digit_seq)
                |       b   (?&PPR_X_b_digit_seq)
                |       o?  (?&PPR_X_o_digit_seq)
                )
            |
                (?>
                        (?>(?&PPR_X_digit_seq))
                    (?: \. (?&PPR_X_digit_seq)?+ )?+
                |
                        \. (?&PPR_X_digit_seq)
                )
                (?: [eE] [+-]?+ (?&PPR_X_digit_seq) )?+
            )
    )) # End of rule

        (?<PerlOldQualifiedIdentifier>   (?<PerlStdOldQualifiedIdentifier>
            (?> (?> :: | ' ) \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlQualifiedIdentifier>   (?<PerlStdQualifiedIdentifier>
            (?>     ::       \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlIdentifier>   (?<PerlStdIdentifier>
                                    [^\W\d]\w*+
    )) # End of rule

        (?<PerlBareword>   (?<PerlStdBareword>
            (?! (?> (?= \w )
                    (?> for(?:each)?+ | while | if      | unless | until | use | no
                    |   given         | when  | sub     | return | my    | our | state
                    |   try           | catch | finally | defer
                    )
                |   (?&PPR_X_named_op)
                |   __ (?> END | DATA ) __ \b
                ) \b
                (?! (?>(?&PerlOWS)) => )
            )
            (?! (?> q[qwrx]?+ | [mys] | tr ) \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            )
            (?: :: )?+
            [^\W\d]\w*+
            (?: (?: :: | ' )  [^\W\d]\w*+  )*+
            (?: :: )?+
            (?! \( )    # )
        |
            :: (?! \w | \{ )
    )) # End of rule

        (?<PerlKeyword>   (?<PerlStdKeyword>
            (?!)    # None, by default, but can be overridden in a composing regex
    )) # End of rule

        (?<PerlPodSequence>   (?<PerlStdPodSequence>
            (?>(?&PerlOWS))  (?: (?>(?&PerlPod))  (?&PerlOWS) )*+
    )) # End of rule

        (?<PerlPod>   (?<PerlStdPod>
            ^ = [^\W\d]\w*+             # A line starting with =<identifier>
            .*?                         # Up to the first...
            (?>
                ^ = cut \b [^\n]*+ $    # ...line starting with =cut
            |                           # or
                \z                      # ...EOF
            )
    )) # End of rule


        ##### Whitespace matching (part of API) #################################

        (?<PerlOWSOrEND>   (?<PerlStdOWSOrEND>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            |
                __ (?> END | DATA ) __ \b .*+ \z
            )*+
    )) # End of rule

        (?<PerlOWS>   (?<PerlStdOWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )*+
    )) # End of rule

        (?<PerlNWS>   (?<PerlStdNWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )++
    )) # End of rule

        (?<PerlEndOfLine>   (?<PerlStdEndOfLine>
            \n
    )) # End of rule


        ###### Internal components (not part of API) ##########################

        (?<PPR_X_named_op>
            (?> cmp
            |   [lg][te]
            |   eq
            |   ne
            |   and
            |   or
            |   xor
            )
        ) # End of rule (?<PPR_X_named_op>)

        (?<PPR_X_non_reserved_identifier>
            (?! (?>
                   for(?:each)?+ | while   | if    | unless | until | given | when | default
                |  sub | format  | use     | no    | my     | our   | state
                |  try | catch   | finally | defer
                |  (?&PPR_X_named_op)
                |  [msy] | q[wrxq]?+ | tr
                |   __ (?> END | DATA ) __
                )
                \b
            )
            (?>(?&PerlQualifiedIdentifier))
            (?! :: )
        ) # End of rule (?<PPR_X_non_reserved_identifier>)

        (?<PPR_X_three_part_list>
            \(  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            \)
        ) # End of rule (?<PPR_X_three_part_list>)

        (?<PPR_X_indirect_obj>
            (?&PerlBareword)
        |
            (?>(?&PerlVariableScalar))
            (?! (?>(?&PerlOWS)) (?> [<\[\{] | -> ) )
        ) # End of rule (?<PPR_X_indirect_obj>)

        (?<PPR_X_quotelike_body>
            (?>(?&PPR_X_quotelike_body_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body>)

        (?<PPR_X_balanced_parens>
            [^)(\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^)(\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens>)

        (?<PPR_X_balanced_curlies>
            [^\}\{\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^\}\{\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies>)

        (?<PPR_X_balanced_squares>
            [^][\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?&PPR_X_balanced_squares)  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^][\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares>)

        (?<PPR_X_balanced_angles>
            [^><\\\n]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^><\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles>)

        (?<PPR_X_balanced_unicode_delims>
            (?============================)* <-- HERE +
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                (?============================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims>)

        (?<PPR_X_regex_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))            (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))            (?= \] )
                |
                    \(  (?>
                            \?{1,2}+ (?= \{ )
                            (?>(?&PerlBlock))
                        |
                            (?! \?{1,2}+ \{ )
                            (?>(?&PPR_X_balanced_parens))
                        )                                       (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))              (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_regex_body_unclosed>)

        (?<PPR_X_quotelike_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))        (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))        (?= \] )
                |
                    \(  (?>(?&PPR_X_balanced_parens))         (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))          (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_quotelike_body_unclosed>)

        (?<PPR_X_quotelike_body_interpolated>
            (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated>)

        (?<PPR_X_regex_body_interpolated>
            (?>(?&PPR_X_regex_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_regex_body_interpolated>)

        (?<PPR_X_balanced_parens_regex_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_regex_interpolated>)

        (?<PPR_X_balanced_curlies_regex_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_regex_interpolated>)

        (?<PPR_X_balanced_squares_regex_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\](|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\](|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_regex_interpolated>)

        (?<PPR_X_balanced_angles_regex_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_regex_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_regex_interpolated>)


        (?<PPR_X_balanced_unicode_delims_regex_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=======================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?========================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlScalarAccessNoSpace)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_regex_interpolated>)


        (?<PPR_X_balanced_parens_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_interpolated>)

        (?<PPR_X_balanced_curlies_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_interpolated>)

        (?<PPR_X_balanced_squares_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\]] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\]] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_interpolated>)

        (?<PPR_X_balanced_unicode_delims_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! \s | (?======================) ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! \s | (?======================) ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_interpolated>)

        (?<PPR_X_balanced_angles_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_interpolated>)

        (?<PPR_X_regex_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#|()] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#|()] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_regex_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s|()-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s|()-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_regex_body_unclosed)
        ) # End of rule (?<PPR_X_regex_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_quotelike_body_unclosed)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_s_e_check>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body_interpolated)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check>)

        (?<PPR_X_quotelike_s_e_check_uninterpolated>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check_uninterpolated>)

        (?<PPR_X_filetest_name>   [ABCMORSTWXbcdefgkloprstuwxz]          )

        (?<PPR_X_digit_seq>               \d++ (?: _?+         \d++ )*+  )
        (?<PPR_X_x_digit_seq>     [\da-fA-F]++ (?: _?+ [\da-fA-F]++ )*+  )
        (?<PPR_X_o_digit_seq>          [0-7]++ (?: _?+      [0-7]++ )*+  )
        (?<PPR_X_b_digit_seq>          [0-1]++ (?: _?+      [0-1]++ )*+  )

        (?<PPR_X_newline_and_heredoc>
            \n (?===================================================================================================)
        ) # End of rule (?<PPR_X_newline_and_heredoc>)
    )
    # END OF GRAMMAR
)/ at (eval 33) line 2198.
t/plugin-coresignatures.t ....... 
Dubious, test returned 255 (wstat 65280, 0xff00)
No subtests run 
(?============================)* matches null string many times in regex; marked by <-- HERE in m/(?(DEFINE)

(?<PerlStatement>(?<PerlWrapperStatement_001>(?&PerlBabbleInnerMatch)|(?&PerlStdStatement)))
(?<PerlBabbleInnerMatch>(?<PerlWrapperBabbleInnerMatch_001>((?&PerlStdBabbleInnerMatch))(?================================================================)))
(?<PerlStdBabbleInnerMatch>(?>(?&PerlPrefixPostfixTerm))(?>(?&PerlOWS) //=)(?>(?&PerlOWS))(?>(?&PerlPrefixPostfixTerm))(?>(?&PerlOWS))
        (?&PerlStatementModifier)?+
        (?>(?&PerlOWS))
        (?> ; | (?= \} | \z ))
      )

) (?^umsx:
    (?(DEFINE)

        (?<PerlEntireDocument>   (?<PerlStdEntireDocument>
            \A
            (?&PerlDocument)
            (?:
                \Z
            |
                (?(?===========================)
                    (?>(?&PerlOWSOrEND))  (?=======)  ([^\n]++)
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlDocument>   (?<PerlStdDocument>
            \x{FEFF}?+                      # Optional BOM marker
            (?&PerlStatementSequence)
            (?&PerlOWSOrEND)
    )) # End of rule

        (?<PerlStatementSequence>   (?<PerlStdStatementSequence>
            (?>(?&PerlPodSequence))
            (?:
                (?&PerlStatement)
                (?&PerlPodSequence)
            )*+
    )) # End of rule

        (?<PerlStatement>   (?<PerlStdStatement>
            (?>
                (?>(?&PerlPodSequence))
                (?: (?>(?&PerlLabel)) (?&PerlOWSOrEND) )?+
                (?>(?&PerlPodSequence))
                (?>
                    (?&PerlKeyword)
                |
                    (?&PerlSubroutineDeclaration)
                |
                    (?&PerlUseStatement)
                |
                    (?&PerlPackageDeclaration)
                |
                    (?&PerlControlBlock)
                |
                    (?&PerlFormat)
                |
                    (?>(?&PerlExpression))          (?>(?&PerlOWS))
                    (?&PerlStatementModifier)?+     (?>(?&PerlOWSOrEND))
                    (?> ; | (?= \} | \z ))
                |
                    (?&PerlBlock)
                |
                    ;
                )

            | # A yada-yada...
                \.\.\. (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just a label...
                (?>(?&PerlLabel)) (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just an empty statement...
                (?>(?&PerlOWS)) ;

            | # An error (report it, if it's the first)...
                (?(?===========================)
                    (?> (?&PerlOWS) )
                    (?! (?: \} | \z ) )
                    (?=========)
                    ( (?&PerlExpression) (?&PerlOWS) [^\n]++ | [^;\}]++ )
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlSubroutineDeclaration>   (?<PerlStdSubroutineDeclaration>
        (?>
            (?: (?> my | our | state ) \b      (?>(?&PerlOWS)) )?+
            sub \b                             (?>(?&PerlOWS))
            (?>(?&PerlOldQualifiedIdentifier))    (?&PerlOWS)
        |
            AUTOLOAD                              (?&PerlOWS)
        |
            DESTROY                               (?&PerlOWS)
        )
        (?:
            # Perl pre 5.028
            (?:
                (?>
                    (?&PerlSignature)    # Parameter list
                |
                    \( [^)]*+ \)         # Prototype (
                )
                (?&PerlOWS)
            )?+
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
        |
            # Perl post 5.028
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
        )
        (?> ; | (?&PerlBlock) )
    )) # End of rule

        (?<PerlSignature>   (?<PerlStdSignature>
            \(
                (?>(?&PerlOWS))
                (?&PerlParameterDeclaration)*+
            \)
    )) # End of rule

        (?<PerlParameterDeclaration>   (?<PerlStdParameterDeclaration>
            (?:
                    \$  (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)?+ (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableScalar) (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)   (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableArray) (?>(?&PerlOWS))
            |
                (?&PerlVariableHash)  (?>(?&PerlOWS))
            )
            (?: , (?>(?&PerlOWS))  |  (?= \) ) )     # (
    )) # End of rule


        (?<PerlUseStatement>   (?<PerlStdUseStatement>
        (?: use | no ) (?>(?&PerlNWS))
        (?>
            (?&PerlVersionNumber)
        |
            (?>(?&PerlQualifiedIdentifier))
            (?: (?>(?&PerlNWS)) (?&PerlVersionNumber)
                (?! (?>(?&PerlOWS)) (?> (?&PerlInfixBinaryOperator) | (?&PerlComma) | \? ) )
            )?+
            (?: (?>(?&PerlNWS)) (?&PerlPodSequence) )?+
            (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        )
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlReturnExpression>   (?<PerlStdReturnExpression>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
    )) # End of rule

        (?<PerlReturnStatement>   (?<PerlStdReturnStatement>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlPackageDeclaration>   (?<PerlStdPackageDeclaration>
        package
            (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
        (?: (?>(?&PerlNWS)) (?&PerlVersionNumber) )?+
            (?>(?&PerlOWSOrEND)) (?> ; | (?&PerlBlock) | (?= \} | \z ))
    )) # End of rule

        (?<PerlExpression>   (?<PerlStdExpression>
                                (?>(?&PerlLowPrecedenceNotExpression))
            (?: (?>(?&PerlOWS)) (?>(?&PerlLowPrecedenceInfixOperator))
                (?>(?&PerlOWS))    (?&PerlLowPrecedenceNotExpression)  )*+
    )) # End of rule

        (?<PerlLowPrecedenceNotExpression>   (?<PerlStdLowPrecedenceNotExpression>
            (?: not \b (?&PerlOWS) )*+  (?&PerlCommaList)
    )) # End of rule

        (?<PerlCommaList>   (?<PerlStdCommaList>
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            (?:
                (?: (?>(?&PerlComma))          (?&PerlOWS)   )++
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            )*+
                (?: (?>(?&PerlComma))          (?&PerlOWSOrEND)   )*+
    )) # End of rule

        (?<PerlAssignment>   (?<PerlStdAssignment>
                                (?>(?&PerlConditionalExpression))
            (?:
                (?>(?&PerlOWS)) (?>(?&PerlAssignmentOperator))
                (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )*+
    )) # End of rule

        (?<PerlScalarExpression>   (?<PerlStdScalarExpression>
        (?<PerlConditionalExpression>   (?<PerlStdConditionalExpression>
            (?>(?&PerlBinaryExpression))
            (?:
                (?>(?&PerlOWS)) \? (?>(?&PerlOWS)) (?>(?&PerlAssignment))
                (?>(?&PerlOWS))  : (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )?+
    )) # End of rule
    )) # End of rule

        (?<PerlBinaryExpression>   (?<PerlStdBinaryExpression>
                                (?>(?&PerlPrefixPostfixTerm))
            (?: (?>(?&PerlOWS)) (?>(?&PerlInfixBinaryOperator))
                (?>(?&PerlOWS))    (?&PerlPrefixPostfixTerm) )*+
    )) # End of rule

        (?<PerlPrefixPostfixTerm>   (?<PerlStdPrefixPostfixTerm>
            (?: (?>(?&PerlPrefixUnaryOperator))  (?&PerlOWS) )*+
            (?>(?&PerlTerm))
            (?: (?>(?&PerlOWS)) (?&PerlPostfixUnaryOperator) )?+
    )) # End of rule

        (?<PerlLvalue>   (?<PerlStdLvalue>
            (?>
                \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier)
            |
                \(                                                                     (?>(?&PerlOWS))
                    (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )      (?>(?&PerlOWS))
                    (?:
                        (?>(?&PerlComma))                                              (?>(?&PerlOWS))
                        (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )  (?>(?&PerlOWS))
                    )*+
                    (?: (?>(?&PerlComma)) (?&PerlOWS) )?+
                \)
            )
    )) # End of rule

        (?<PerlTerm>   (?<PerlStdTerm>
            (?>
                (?&PerlReturnExpression)

            # The remaining alternatives can all take postfix dereferencers...
            | (?:
                    (?= \$ )  (?&PerlScalarAccess)
              |
                    (?= \@ )  (?&PerlArrayAccess)
              |
                    (?=  % )  (?&PerlHashAccess)
              |
                    (?&PerlAnonymousSubroutine)
              |
                    (?>(?&PerlNullaryBuiltinFunction))  (?! (?>(?&PerlOWS)) \( )
              |
                    (?&PerlDoBlock) | (?&PerlEvalBlock)
              |
                    (?&PerlCall)
              |
                    (?&PerlVariableDeclaration)
              |
                    (?&PerlTypeglob)
              |
                    (?>(?&PerlParenthesesList))

                    # Can optionally do a [...] lookup straight after the parens,
                    # followd by any number of other look-ups
                    (?:
                        (?>(?&PerlOWS)) (?&PerlArrayIndexer)
                        (?:
                            (?>(?&PerlOWS))
                            (?>
                                (?&PerlArrayIndexer)
                            |   (?&PerlHashIndexer)
                            |   (?&PerlParenthesesList)
                            )
                        )*+
                    )?+
              |
                    (?&PerlAnonymousArray)
              |
                    (?&PerlAnonymousHash)
              |
                    (?&PerlDiamondOperator)
              |
                    (?&PerlContextualMatch)
              |
                    (?&PerlQuotelikeS)
              |
                    (?&PerlQuotelikeTR)
              |
                    (?&PerlQuotelikeQX)
              |
                    (?&PerlLiteral)
              )

              (?: (?&PerlTermPostfixDereference) )?+
            )
    )) # End of rule

        (?<PerlTermPostfixDereference>   (?<PerlStdTermPostfixDereference>
            # Must have at least one arrowed dereference...
            (?:
                (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?>  (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    (?:
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    )*+

                |   # A method call...
                    (?> (?&PerlQualifiedIdentifier) | (?! \$\#\* ) (?&PerlVariableScalar) )
                    (?: (?>(?&PerlOWS)) (?&PerlParenthesesList) )?+

                |   # An array or hash slice or k/v slice
                    # (provided it's not subsequently dereferenced)
                    [\@%] (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS))  [\@%]?+  [\[\{] )

                |   # An array max-index lookup...
                    \$\#\*

                |   # A scalar-, glob-, or subroutine dereference...
                    [\$*&] \*

                |   # An array dereference (provided it's not subsequently dereferenced)...
                    \@\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\[\@] )

                |   # A hash dereference (provided it's not subsequently dereferenced)...
                    \%\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\{%] )

                |   # A glob lookup...
                    \* (?&PerlHashIndexer)
                )
            )++
    )) # End of rule

        (?<PerlControlBlock>   (?<PerlStdControlBlock>
            (?> # Conditionals...
                (?> if | unless ) \b                 (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))          (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    elsif \b                         (?>(?&PerlOWS))
                    (?>(?&PerlParenthesesList))      (?>(?&PerlOWS))
                    (?&PerlBlock)
                )*+

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    else \b                          (?>(?&PerlOWS))
                    (?&PerlBlock)
                )?+

            |   # Loops...
                (?>
                    for(?:each)?+ \b
                    (?>(?&PerlOWS))
                    (?:
                        (?> # Explicitly aliased iterator variable...
                            (?> \\ (?>(?&PerlOWS))  (?> my | our | state )
                            |                       (?> my | our | state )  (?>(?&PerlOWS)) \\
                            )
                            (?>(?&PerlOWS))
                            (?> (?&PerlVariableScalar)
                            |   (?&PerlVariableArray)
                            |   (?&PerlVariableHash)
                            )
                        |
                            # List of scalar iterator variables...
                            my                                   (?>(?&PerlOWS))
                            \(                                   (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                (?: ,                            (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                )*+
                                (?: ,                            (?>(?&PerlOWS)) )?+
                            \)

                        |
                            # Implicitly aliased iterator variable...
                            (?> (?: my | our | state ) (?>(?&PerlOWS)) )?+
                            (?&PerlVariableScalar)
                        )?+
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlQuotelikeQW) )
                    |
                        (?&PPR_X_three_part_list)
                    )
                |
                    (?> while | until) \b (?>(?&PerlOWS))
                    (?&PerlParenthesesList)
                )

                (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                    (?>(?&PerlOWS))   continue
                    (?>(?&PerlOWS))   (?&PerlBlock)
                )?+

            | # Phasers...
                (?> BEGIN | END | CHECK | INIT | UNITCHECK ) \b   (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Try/catch/finallys...
                (?>(?&PerlTryCatchFinallyBlock))

            | # Defers...
                defer                                     (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Switches...
                (?> given | when ) \b                     (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))               (?>(?&PerlOWS))
                (?&PerlBlock)
            |
                default                                   (?>(?&PerlOWS))
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlFormat>   (?<PerlStdFormat>
            format
            (?: (?>(?&PerlNWS))  (?&PerlQualifiedIdentifier)  )?+
                (?>(?&PerlOWS))  = [^\n]*+
                (?&PPR_X_newline_and_heredoc)
            (?:
                (?! \. \n )
                [^\n\$\@]*+
                (?:
                    (?>
                        (?= \$ (?! \s ) )  (?&PerlScalarAccessNoSpace)
                    |
                        (?= \@ (?! \s ) )  (?&PerlArrayAccessNoSpace)
                    )
                    [^\n\$\@]*+
                )*+
                (?&PPR_X_newline_and_heredoc)
            )*+
            \. (?&PerlEndOfLine)
    )) # End of rule

        (?<PerlStatementModifier>   (?<PerlStdStatementModifier>
            (?> if | for(?:each)?+ | while | unless | until | when )
            \b
            (?>(?&PerlOWS))
            (?&PerlExpression)
    )) # End of rule

        (?<PerlBlock>   (?<PerlStdBlock>
            \{  (?>(?&PerlStatementSequence))  \}
    )) # End of rule

        (?<PerlCall>   (?<PerlStdCall>
            (?>
                [&]                                    (?>(?&PerlOWS))
                (?> (?&PerlBlock)
                |   (?&PerlVariableScalar)
                |   (?&PerlQualifiedIdentifier)
                )                                      (?>(?&PerlOWS))
                (?:
                    \(                                 (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))        (?&PerlOWS)   )?+
                    \)
                )?+
            |
                - (?>(?&PPR_X_filetest_name))            (?>(?&PerlOWS))
                (?&PerlPrefixPostfixTerm)?+
            |
                (?>(?&PerlBuiltinFunction))            (?>(?&PerlOWS))
                (?>
                    \(                                 (?>(?&PerlOWS))
                        (?>
                            (?= (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlExpression)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlExpression)
                        |
                            (?&PerlExpression)?+
                        )                              (?>(?&PerlOWS))
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            |
                (?>(?&PPR_X_non_reserved_identifier)) (?>(?&PerlOWS))
                (?>
                    \(                              (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))     (?&PerlOWS)  )?+
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))           (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))        (?&PerlNWS)
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            )
    )) # End of rule

        (?<PerlVariableDeclaration>   (?<PerlStdVariableDeclaration>
            (?> my | our | state ) \b           (?>(?&PerlOWS))
            (?: (?&PerlQualifiedIdentifier)        (?&PerlOWS)  )?+
            (?>(?&PerlLvalue))                  (?>(?&PerlOWS))
            (?&PerlAttributes)?+
    )) # End of rule

        (?<PerlDoBlock>   (?<PerlStdDoBlock>
            do (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlEvalBlock>   (?<PerlStdEvalBlock>
            eval (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlTryCatchFinallyBlock>   (?<PerlStdTryCatchFinallyBlock>

                try \b                                (?>(?&PerlOWS))
                (?>(?&PerlBlock))
                                                      (?>(?&PerlOWS))
                catch \b                              (?>(?&PerlOWS))
                \(  (?>(?&PerlVariableScalar))  \)    (?>(?&PerlOWS))
                (?>(?&PerlBlock))

            (?:
                                                      (?>(?&PerlOWS))
                finally \b                            (?>(?&PerlOWS))
                (?>(?&PerlBlock))
            )?+
    )) # End of rule

        (?<PerlAttributes>   (?<PerlStdAttributes>
            :
            (?>(?&PerlOWS))
            (?>(?&PerlIdentifier))
            (?:
                (?= \( ) (?&PPR_X_quotelike_body)
            )?+

            (?:
                (?> (?>(?&PerlOWS)) : (?&PerlOWS) | (?&PerlNWS) )
                (?>(?&PerlIdentifier))
                (?:
                    (?= \( ) (?&PPR_X_quotelike_body)
                )?+
            )*+
    )) # End of rule

        (?<PerlList>   (?<PerlStdList>
            (?> (?&PerlParenthesesList) | (?&PerlCommaList) )
    )) # End of rule

        (?<PerlParenthesesList>   (?<PerlStdParenthesesList>
            \(  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \)
    )) # End of rule

        (?<PerlAnonymousArray>   (?<PerlStdAnonymousArray>
            \[  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \]
    )) # End of rule

        (?<PerlAnonymousHash>   (?<PerlStdAnonymousHash>
            \{  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+ \}
    )) # End of rule

        (?<PerlArrayIndexer>   (?<PerlStdArrayIndexer>
            \[                          (?>(?&PerlOWS))
                (?>(?&PerlExpression))  (?>(?&PerlOWS))
            \]
    )) # End of rule

        (?<PerlHashIndexer>   (?<PerlStdHashIndexer>
            \{  (?>(?&PerlOWS))
                (?: -?+ (?&PerlIdentifier) | (?&PerlExpression) )  # (Note: MUST allow backtracking here)
                (?>(?&PerlOWS))
            \}
    )) # End of rule

        (?<PerlDiamondOperator>   (?<PerlStdDiamondOperator>
            <<>>    # Perl 5.22 "double diamond"
        |
            < (?! < )
                (?>(?&PPR_X_balanced_angles))
            >
            (?=
                (?>(?&PerlOWSOrEND))
                (?> \z | [,;\}\])?] | => | : (?! :)        # (
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule

        (?<PerlComma>   (?<PerlStdComma>
            (?> , | => )
    )) # End of rule

        (?<PerlPrefixUnaryOperator>   (?<PerlStdPrefixUnaryOperator>
            (?> \+\+ | -- | [!\\+~] | - (?! (?&PPR_X_filetest_name) \b ) )
    )) # End of rule

        (?<PerlPostfixUnaryOperator>   (?<PerlStdPostfixUnaryOperator>
            (?> \+\+  |  -- )
    )) # End of rule

        (?<PerlInfixBinaryOperator>   (?<PerlStdInfixBinaryOperator>
            (?>  [=!][~=]
            |    cmp
            |    <= >?+
            |    >=
            |    [lg][te]
            |    eq
            |    ne
            |    [+]             (?! [+=] )
            |     -              (?! [-=] )
            |    [.]{2,3}+
            |    [.%x]           (?! [=]  )
            |    [&|^][.]        (?! [=]  )
            |    [<>*&|/]{1,2}+  (?! [=]  )
            |    \^              (?! [=]  )
            |    ~~
            |    isa
            )
    )) # End of rule

        (?<PerlAssignmentOperator>   (?<PerlStdAssignmentOperator>
            (?:  [<>*&|/]{2}
            |  [-+.*/%x]
            |  [&|^][.]?+
            )?+
            =
            (?! > )
    )) # End of rule

        (?<PerlLowPrecedenceInfixOperator>   (?<PerlStdLowPrecedenceInfixOperator>
            (?> or | and | xor )
    )) # End of rule

        (?<PerlAnonymousSubroutine>   (?<PerlStdAnonymousSubroutine>
            sub \b
            (?>(?&PerlOWS))
            (?:
                # Perl pre 5.028
                (?:
                    (?>
                        (?&PerlSignature)    # Parameter list
                    |
                        \( [^)]*+ \)         # Prototype (
                    )
                    (?&PerlOWS)
                )?+
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            |
                # Perl post 5.028
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
                (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
            )
            (?&PerlBlock)
    )) # End of rule

        (?<PerlVariable>   (?<PerlStdVariable>
            (?= [\$\@%] )
            (?>
                (?&PerlScalarAccess)
            |   (?&PerlHashAccess)
            |   (?&PerlArrayAccess)
            )
            (?> (?&PerlTermPostfixDereference) )?+
    )) # End of rule

        (?<PerlTypeglob>   (?<PerlStdTypeglob>
            \*
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier))  (?: :: )?+
            |
                (?&PerlVariableScalar)
            |
                [][!"#\$%&'()*+,./:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccess>   (?<PerlStdArrayAccess>
            (?>(?&PerlVariableArray))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccessNoSpace>   (?<PerlStdArrayAccessNoSpace>
            (?>(?&PerlVariableArrayNoSpace))

            # Optional arrowless access(es) to begin
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any number of optional arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlArrayAccessNoSpaceNoArrow>   (?<PerlStdArrayAccessNoSpaceNoArrow>
            (?>(?&PerlVariableArray))
            (?:
                (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
            )*+
    )) # End of rule

        (?<PerlHashAccess>   (?<PerlStdHashAccess>
            (?>(?&PerlVariableHash))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlScalarAccess>   (?<PerlStdScalarAccess>
            (?>(?&PerlVariableScalar))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlScalarAccessNoSpace>   (?<PerlStdScalarAccessNoSpace>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) to begin...
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any nuber of arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlScalarAccessNoSpaceNoArrow>   (?<PerlStdScalarAccessNoSpaceNoArrow>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) (but parens can't be first)...
            (?:
                (?! \( )
                (?:
                    (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlVariableScalar>   (?<PerlStdVariableScalar>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
                (?&PerlOWS)
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ [!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-] \}
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableScalarNoSpace>   (?<PerlStdVariableScalarNoSpace>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableArray>   (?<PerlStdVariableArray>
            \@     (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableArrayNoSpace>   (?<PerlStdVariableArrayNoSpace>
            \@
            (?: \$ )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableHash>   (?<PerlStdVariableHash>
            %      (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)?+
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlLabel>   (?<PerlStdLabel>
            (?! (?> [msy] | q[wrxq]?+ | tr ) \b )
            (?>(?&PerlIdentifier))
            : (?! : )
    )) # End of rule

        (?<PerlLiteral>   (?<PerlStdLiteral>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlNumber)
            |   (?&PerlBareword)
            )
    )) # End of rule

        (?<PerlString>   (?<PerlStdString>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                (?: q \b | qq (?= (?>(?&PerlOWS)) ' ) )
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            |
                qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            |
                (?&PerlHeredoc)
            |
                (?&PerlVString)
            )
    )) # End of rule

        (?<PerlQuotelike>   (?<PerlStdQuotelike>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlQuotelikeQX)
            |   (?&PerlContextualMatch)
            |   (?&PerlQuotelikeS)
            |   (?&PerlQuotelikeTR)
            )
    )) # End of rule

        (?<PerlHeredoc>   (?<PerlStdHeredoc>
            # Match the introducer...
            <<
            (?<_heredoc_indented> [~]?+ )

            # Match the terminator specification...
            (?>
                \\?+   (?<_heredoc_terminator>  (?&PerlIdentifier)              )
            |
                (?>(?&PerlOWS))
                (?>
                    "  (?<_heredoc_terminator>  [^"\\]*+  (?: \\. [^"\\]*+ )*+  )  "  #"
                |
                    (?<PPR_X_HD_nointerp> ' )
                    (?<_heredoc_terminator>  [^'\\]*+  (?: \\. [^'\\]*+ )*+  )  '  #'
                |
                    `  (?<_heredoc_terminator>  [^`\\]*+  (?: \\. [^`\\]*+ )*+  )  `  #`
                )
            |
                    (?<_heredoc_terminator>                                  )
            )

            # Do we need to reset the heredoc cache???
            (?====================================================================================================================================================================================================================================================================)

            # Do we need to cache content lookahead for this heredoc???
            (?(?==============================================================================================================================================================================)

                # Lookahead to detect and remember trailing contents of heredoc
                (?=
                    [^\n]*+ \n                                   # Go to the end of the current line
                    (?==========)                                # Remember the start of the contents
                    (?==========================================)   # Skip earlier heredoc contents
                    (?>                                          # The heredoc contents consist of...
                        (?:
                            (?!
                                (?(?=========================) \h*+ )   # An indent (if it was a <<~)
                                \g{_heredoc_terminator}                 # The terminator
                                (?: \n | \z )                           # At an end-of-line
                            )
                            (?(<PPR_X_HD_nointerp>)
                                [^\n]*+ \n
                            |
                                [^\n\$\@]*+
                                (?:
                                    (?>
                                        (?===========================================)
                                        (?= \$ )  (?&PerlScalarAccess)
                                        (?===============================)
                                    |
                                        (?===========================================)
                                        (?= \@ )  (?&PerlArrayAccess)
                                        (?===============================)
                                    )
                                    [^\n\$\@]*+
                                )*+
                                \n (?==========================================)
                            )
                        )*+

                        (?(?=========================) \h*+ )            # An indent (if it was a <<~)
                        \g{_heredoc_terminator}                          # The specified terminator
                        (?: \n | \z )                                    # Followed by EOL
                    )

                    # Then memoize the skip for when it's subsequently needed by PerlOWS or PerlNWS...
                    (?===============================================================================================================================================================================================================================================================================================================================================================================)
                )
            )

    )) # End of rule

        (?<PerlQuotelikeQ>   (?<PerlStdQuotelikeQ>
            (?>
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                \b q \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQQ>   (?<PerlStdQuotelikeQQ>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                \b qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            )
    )) # End of rule

        (?<PerlQuotelikeQW>   (?<PerlStdQuotelikeQW>
            (?>
                qw \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQX>   (?<PerlStdQuotelikeQX>
            (?>
                `  [^`]*+  (?: \\. [^`]*+ )*+  `
            |
                qx
                    (?>
                        (?= (?>(?&PerlOWS)) ' )
                        (?&PPR_X_quotelike_body)
                    |
                        \b (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                        (?&PPR_X_quotelike_body_interpolated)
                    )
            )
    )) # End of rule

        (?<PerlQuotelikeS>   (?<PerlStdQuotelikeS>
        (?<PerlSubstitution>   (?<PerlStdSubstitution>
            s \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{]                 # )
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_regex_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Single-quoted syntax...
                (?= (?>(?&PerlOWS)) ' )
                (?>(?&PPR_X_regex_body_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Delimited syntax...
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            )
            [msixpodualgcern]*+
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeTR>   (?<PerlStdQuotelikeTR>
        (?<PerlTransliteration>   (?<PerlStdTransliteration>
            (?> tr | y ) \b
            (?! (?>(?&PerlOWS)) => )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{\«]                 # )]
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_quotelike_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Delimited syntax...
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            )
            [cdsr]*+
    )) # End of rule
    )) # End of rule

        (?<PerlContextualQuotelikeM>   (?<PerlStdContextualQuotelikeM>
        (?<PerlContextualMatch>   (?<PerlStdContextualMatch>
            (?<PerlQuotelikeM>
            (?<PerlMatch>
                (?>
                    \/\/
                |
                    (?>
                        m (?= [#] )
                    |
                        m \b
                        (?! (?>(?&PerlOWS)) => )
                    |
                        (?= \/ [^/] )
                    )
                    (?&PPR_X_regex_body_interpolated)
                )
                [msixpodualgcn]*+
            ) # End of rule (?<PerlMatch>)
            ) # End of rule (?<PerlQuotelikeM>)
            (?=
                (?>(?&PerlOWS))
                (?> \z | [,;\}\])?] | => | : (?! :)
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeQR>   (?<PerlStdQuotelikeQR>
            qr \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>(?&PPR_X_regex_body_interpolated))
            [msixpodualn]*+
    )) # End of rule

        (?<PerlRegex>   (?<PerlStdRegex>
            (?>
                (?&PerlMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule

        (?<PerlContextualRegex>   (?<PerlStdContextualRegex>
            (?>
                (?&PerlContextualMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule


        (?<PerlBuiltinFunction>   (?<PerlStdBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?=[^\W\d]) # Skip if possible
            (?>
                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(?>at|udy)|leep|rand|qrt|ay|in)
                | 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)
                | r(?>e(?>ad(?>lin[ek]|pipe|dir)?|(?>quir|vers|nam)e|winddir|turn|set|cv|do|f)|index|mdir|and)
                | c(?>h(?>o(?>m?p|wn)|r(?>oot)?|dir|mod)|o(?>n(?>tinue|nect)|s)|lose(?>dir)?|aller|rypt)
                | e(?>nd(?>(?>hos|ne)t|p(?>roto|w)|serv|gr)ent|x(?>i(?>sts|t)|ec|p)|ach|val(?>bytes)?+|of)
                | l(?>o(?>c(?>al(?>time)?|k)|g)|i(?>sten|nk)|(?>sta|as)t|c(?>first)?|ength)
                | u(?>n(?>(?>lin|pac)k|shift|def|tie)|c(?>first)?|mask|time)
                | p(?>r(?>ototype|intf?)|ack(?>age)?|o[ps]|ipe|ush)
                | d(?>bm(?>close|open)|e(?>fined|lete)|ump|ie|o)
                | f(?>or(?>m(?>line|at)|k)|ileno|cntl|c|lock)
                | t(?>i(?>mes?|ed?)|ell(?>dir)?|runcate)
                | w(?>a(?>it(?>pid)?|ntarray|rn)|rite)
                | m(?>sg(?>ctl|get|rcv|snd)|kdir|ap)
                | b(?>in(?>mode|d)|less|reak)
                | i(?>n(?>dex|t)|mport|octl)
                | a(?>ccept|larm|tan2|bs)
                | o(?>pen(?>dir)?|ct|rd)
                | v(?>alues|ec)
                | k(?>eys|ill)
                | quotemeta
                | join
                | next
                | hex
                | _
            )
            \b
    )) # End of rule

        (?<PerlNullaryBuiltinFunction>   (?<PerlStdNullaryBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?= [^\W\d] )  # Skip if possible
            (?>
                get(?:(?:(?:hos|ne)t|serv|gr)ent|p(?:(?:roto|w)ent|pid)|login)
                | end(?:(?:hos|ne)t|p(?:roto|w)|serv|gr)ent
                | wa(?:ntarray|it)
                | times?
                | fork
                | _
            )
            \b
    )) # End of rule

        (?<PerlVersionNumber>   (?<PerlStdVersionNumber>
            (?>
                (?&PerlVString)
            |
                (?>(?&PPR_X_digit_seq))
                (?: \. (?&PPR_X_digit_seq)?+ )*+
            )
    )) # End of rule

        (?<PerlVString>   (?<PerlStdVString>
            v  (?>(?&PPR_X_digit_seq))  (?: \. (?&PPR_X_digit_seq) )*+
    )) # End of rule

        (?<PerlNumber>   (?<PerlStdNumber>
            [+-]?+
            (?>
                0  (?>  x   (?&PPR_X_x_digit_seq)
                |       b   (?&PPR_X_b_digit_seq)
                |       o?  (?&PPR_X_o_digit_seq)
                )
            |
                (?>
                        (?>(?&PPR_X_digit_seq))
                    (?: \. (?&PPR_X_digit_seq)?+ )?+
                |
                        \. (?&PPR_X_digit_seq)
                )
                (?: [eE] [+-]?+ (?&PPR_X_digit_seq) )?+
            )
    )) # End of rule

        (?<PerlOldQualifiedIdentifier>   (?<PerlStdOldQualifiedIdentifier>
            (?> (?> :: | ' ) \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlQualifiedIdentifier>   (?<PerlStdQualifiedIdentifier>
            (?>     ::       \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlIdentifier>   (?<PerlStdIdentifier>
                                    [^\W\d]\w*+
    )) # End of rule

        (?<PerlBareword>   (?<PerlStdBareword>
            (?! (?> (?= \w )
                    (?> for(?:each)?+ | while | if      | unless | until | use | no
                    |   given         | when  | sub     | return | my    | our | state
                    |   try           | catch | finally | defer
                    )
                |   (?&PPR_X_named_op)
                |   __ (?> END | DATA ) __ \b
                ) \b
                (?! (?>(?&PerlOWS)) => )
            )
            (?! (?> q[qwrx]?+ | [mys] | tr ) \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            )
            (?: :: )?+
            [^\W\d]\w*+
            (?: (?: :: | ' )  [^\W\d]\w*+  )*+
            (?: :: )?+
            (?! \( )    # )
        |
            :: (?! \w | \{ )
    )) # End of rule

        (?<PerlKeyword>   (?<PerlStdKeyword>
            (?!)    # None, by default, but can be overridden in a composing regex
    )) # End of rule

        (?<PerlPodSequence>   (?<PerlStdPodSequence>
            (?>(?&PerlOWS))  (?: (?>(?&PerlPod))  (?&PerlOWS) )*+
    )) # End of rule

        (?<PerlPod>   (?<PerlStdPod>
            ^ = [^\W\d]\w*+             # A line starting with =<identifier>
            .*?                         # Up to the first...
            (?>
                ^ = cut \b [^\n]*+ $    # ...line starting with =cut
            |                           # or
                \z                      # ...EOF
            )
    )) # End of rule


        ##### Whitespace matching (part of API) #################################

        (?<PerlOWSOrEND>   (?<PerlStdOWSOrEND>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            |
                __ (?> END | DATA ) __ \b .*+ \z
            )*+
    )) # End of rule

        (?<PerlOWS>   (?<PerlStdOWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )*+
    )) # End of rule

        (?<PerlNWS>   (?<PerlStdNWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )++
    )) # End of rule

        (?<PerlEndOfLine>   (?<PerlStdEndOfLine>
            \n
    )) # End of rule


        ###### Internal components (not part of API) ##########################

        (?<PPR_X_named_op>
            (?> cmp
            |   [lg][te]
            |   eq
            |   ne
            |   and
            |   or
            |   xor
            )
        ) # End of rule (?<PPR_X_named_op>)

        (?<PPR_X_non_reserved_identifier>
            (?! (?>
                   for(?:each)?+ | while   | if    | unless | until | given | when | default
                |  sub | format  | use     | no    | my     | our   | state
                |  try | catch   | finally | defer
                |  (?&PPR_X_named_op)
                |  [msy] | q[wrxq]?+ | tr
                |   __ (?> END | DATA ) __
                )
                \b
            )
            (?>(?&PerlQualifiedIdentifier))
            (?! :: )
        ) # End of rule (?<PPR_X_non_reserved_identifier>)

        (?<PPR_X_three_part_list>
            \(  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            \)
        ) # End of rule (?<PPR_X_three_part_list>)

        (?<PPR_X_indirect_obj>
            (?&PerlBareword)
        |
            (?>(?&PerlVariableScalar))
            (?! (?>(?&PerlOWS)) (?> [<\[\{] | -> ) )
        ) # End of rule (?<PPR_X_indirect_obj>)

        (?<PPR_X_quotelike_body>
            (?>(?&PPR_X_quotelike_body_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body>)

        (?<PPR_X_balanced_parens>
            [^)(\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^)(\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens>)

        (?<PPR_X_balanced_curlies>
            [^\}\{\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^\}\{\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies>)

        (?<PPR_X_balanced_squares>
            [^][\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?&PPR_X_balanced_squares)  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^][\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares>)

        (?<PPR_X_balanced_angles>
            [^><\\\n]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^><\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles>)

        (?<PPR_X_balanced_unicode_delims>
            (?============================)* <-- HERE +
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                (?============================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims>)

        (?<PPR_X_regex_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))            (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))            (?= \] )
                |
                    \(  (?>
                            \?{1,2}+ (?= \{ )
                            (?>(?&PerlBlock))
                        |
                            (?! \?{1,2}+ \{ )
                            (?>(?&PPR_X_balanced_parens))
                        )                                       (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))              (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_regex_body_unclosed>)

        (?<PPR_X_quotelike_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))        (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))        (?= \] )
                |
                    \(  (?>(?&PPR_X_balanced_parens))         (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))          (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_quotelike_body_unclosed>)

        (?<PPR_X_quotelike_body_interpolated>
            (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated>)

        (?<PPR_X_regex_body_interpolated>
            (?>(?&PPR_X_regex_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_regex_body_interpolated>)

        (?<PPR_X_balanced_parens_regex_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_regex_interpolated>)

        (?<PPR_X_balanced_curlies_regex_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_regex_interpolated>)

        (?<PPR_X_balanced_squares_regex_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\](|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\](|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_regex_interpolated>)

        (?<PPR_X_balanced_angles_regex_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_regex_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_regex_interpolated>)


        (?<PPR_X_balanced_unicode_delims_regex_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=======================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?========================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlScalarAccessNoSpace)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_regex_interpolated>)


        (?<PPR_X_balanced_parens_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_interpolated>)

        (?<PPR_X_balanced_curlies_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_interpolated>)

        (?<PPR_X_balanced_squares_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\]] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\]] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_interpolated>)

        (?<PPR_X_balanced_unicode_delims_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! \s | (?======================) ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! \s | (?======================) ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_interpolated>)

        (?<PPR_X_balanced_angles_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_interpolated>)

        (?<PPR_X_regex_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#|()] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#|()] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_regex_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s|()-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s|()-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_regex_body_unclosed)
        ) # End of rule (?<PPR_X_regex_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_quotelike_body_unclosed)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_s_e_check>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body_interpolated)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check>)

        (?<PPR_X_quotelike_s_e_check_uninterpolated>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check_uninterpolated>)

        (?<PPR_X_filetest_name>   [ABCMORSTWXbcdefgkloprstuwxz]          )

        (?<PPR_X_digit_seq>               \d++ (?: _?+         \d++ )*+  )
        (?<PPR_X_x_digit_seq>     [\da-fA-F]++ (?: _?+ [\da-fA-F]++ )*+  )
        (?<PPR_X_o_digit_seq>          [0-7]++ (?: _?+      [0-7]++ )*+  )
        (?<PPR_X_b_digit_seq>          [0-1]++ (?: _?+      [0-1]++ )*+  )

        (?<PPR_X_newline_and_heredoc>
            \n (?===================================================================================================)
        ) # End of rule (?<PPR_X_newline_and_heredoc>)
    )
    # END OF GRAMMAR
)/ at (eval 33) line 2202.
t/plugin-definedor.t ............ 
Dubious, test returned 255 (wstat 65280, 0xff00)
No subtests run 
(?============================)* matches null string many times in regex; marked by <-- HERE in m/(?(DEFINE)

(?<PerlStatement>(?<PerlWrapperStatement_001>(?&PerlBabbleInnerMatch)|(?&PerlStdStatement)))
(?<PerlBabbleInnerMatch>(?<PerlWrapperBabbleInnerMatch_001>((?&PerlStdBabbleInnerMatch))(?================================================================)))
(?<PerlStdBabbleInnerMatch>\.\.\.)

) (?^umsx:
    (?(DEFINE)

        (?<PerlEntireDocument>   (?<PerlStdEntireDocument>
            \A
            (?&PerlDocument)
            (?:
                \Z
            |
                (?(?===========================)
                    (?>(?&PerlOWSOrEND))  (?=======)  ([^\n]++)
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlDocument>   (?<PerlStdDocument>
            \x{FEFF}?+                      # Optional BOM marker
            (?&PerlStatementSequence)
            (?&PerlOWSOrEND)
    )) # End of rule

        (?<PerlStatementSequence>   (?<PerlStdStatementSequence>
            (?>(?&PerlPodSequence))
            (?:
                (?&PerlStatement)
                (?&PerlPodSequence)
            )*+
    )) # End of rule

        (?<PerlStatement>   (?<PerlStdStatement>
            (?>
                (?>(?&PerlPodSequence))
                (?: (?>(?&PerlLabel)) (?&PerlOWSOrEND) )?+
                (?>(?&PerlPodSequence))
                (?>
                    (?&PerlKeyword)
                |
                    (?&PerlSubroutineDeclaration)
                |
                    (?&PerlUseStatement)
                |
                    (?&PerlPackageDeclaration)
                |
                    (?&PerlControlBlock)
                |
                    (?&PerlFormat)
                |
                    (?>(?&PerlExpression))          (?>(?&PerlOWS))
                    (?&PerlStatementModifier)?+     (?>(?&PerlOWSOrEND))
                    (?> ; | (?= \} | \z ))
                |
                    (?&PerlBlock)
                |
                    ;
                )

            | # A yada-yada...
                \.\.\. (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just a label...
                (?>(?&PerlLabel)) (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just an empty statement...
                (?>(?&PerlOWS)) ;

            | # An error (report it, if it's the first)...
                (?(?===========================)
                    (?> (?&PerlOWS) )
                    (?! (?: \} | \z ) )
                    (?=========)
                    ( (?&PerlExpression) (?&PerlOWS) [^\n]++ | [^;\}]++ )
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlSubroutineDeclaration>   (?<PerlStdSubroutineDeclaration>
        (?>
            (?: (?> my | our | state ) \b      (?>(?&PerlOWS)) )?+
            sub \b                             (?>(?&PerlOWS))
            (?>(?&PerlOldQualifiedIdentifier))    (?&PerlOWS)
        |
            AUTOLOAD                              (?&PerlOWS)
        |
            DESTROY                               (?&PerlOWS)
        )
        (?:
            # Perl pre 5.028
            (?:
                (?>
                    (?&PerlSignature)    # Parameter list
                |
                    \( [^)]*+ \)         # Prototype (
                )
                (?&PerlOWS)
            )?+
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
        |
            # Perl post 5.028
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
        )
        (?> ; | (?&PerlBlock) )
    )) # End of rule

        (?<PerlSignature>   (?<PerlStdSignature>
            \(
                (?>(?&PerlOWS))
                (?&PerlParameterDeclaration)*+
            \)
    )) # End of rule

        (?<PerlParameterDeclaration>   (?<PerlStdParameterDeclaration>
            (?:
                    \$  (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)?+ (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableScalar) (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)   (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableArray) (?>(?&PerlOWS))
            |
                (?&PerlVariableHash)  (?>(?&PerlOWS))
            )
            (?: , (?>(?&PerlOWS))  |  (?= \) ) )     # (
    )) # End of rule


        (?<PerlUseStatement>   (?<PerlStdUseStatement>
        (?: use | no ) (?>(?&PerlNWS))
        (?>
            (?&PerlVersionNumber)
        |
            (?>(?&PerlQualifiedIdentifier))
            (?: (?>(?&PerlNWS)) (?&PerlVersionNumber)
                (?! (?>(?&PerlOWS)) (?> (?&PerlInfixBinaryOperator) | (?&PerlComma) | \? ) )
            )?+
            (?: (?>(?&PerlNWS)) (?&PerlPodSequence) )?+
            (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        )
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlReturnExpression>   (?<PerlStdReturnExpression>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
    )) # End of rule

        (?<PerlReturnStatement>   (?<PerlStdReturnStatement>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlPackageDeclaration>   (?<PerlStdPackageDeclaration>
        package
            (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
        (?: (?>(?&PerlNWS)) (?&PerlVersionNumber) )?+
            (?>(?&PerlOWSOrEND)) (?> ; | (?&PerlBlock) | (?= \} | \z ))
    )) # End of rule

        (?<PerlExpression>   (?<PerlStdExpression>
                                (?>(?&PerlLowPrecedenceNotExpression))
            (?: (?>(?&PerlOWS)) (?>(?&PerlLowPrecedenceInfixOperator))
                (?>(?&PerlOWS))    (?&PerlLowPrecedenceNotExpression)  )*+
    )) # End of rule

        (?<PerlLowPrecedenceNotExpression>   (?<PerlStdLowPrecedenceNotExpression>
            (?: not \b (?&PerlOWS) )*+  (?&PerlCommaList)
    )) # End of rule

        (?<PerlCommaList>   (?<PerlStdCommaList>
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            (?:
                (?: (?>(?&PerlComma))          (?&PerlOWS)   )++
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            )*+
                (?: (?>(?&PerlComma))          (?&PerlOWSOrEND)   )*+
    )) # End of rule

        (?<PerlAssignment>   (?<PerlStdAssignment>
                                (?>(?&PerlConditionalExpression))
            (?:
                (?>(?&PerlOWS)) (?>(?&PerlAssignmentOperator))
                (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )*+
    )) # End of rule

        (?<PerlScalarExpression>   (?<PerlStdScalarExpression>
        (?<PerlConditionalExpression>   (?<PerlStdConditionalExpression>
            (?>(?&PerlBinaryExpression))
            (?:
                (?>(?&PerlOWS)) \? (?>(?&PerlOWS)) (?>(?&PerlAssignment))
                (?>(?&PerlOWS))  : (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )?+
    )) # End of rule
    )) # End of rule

        (?<PerlBinaryExpression>   (?<PerlStdBinaryExpression>
                                (?>(?&PerlPrefixPostfixTerm))
            (?: (?>(?&PerlOWS)) (?>(?&PerlInfixBinaryOperator))
                (?>(?&PerlOWS))    (?&PerlPrefixPostfixTerm) )*+
    )) # End of rule

        (?<PerlPrefixPostfixTerm>   (?<PerlStdPrefixPostfixTerm>
            (?: (?>(?&PerlPrefixUnaryOperator))  (?&PerlOWS) )*+
            (?>(?&PerlTerm))
            (?: (?>(?&PerlOWS)) (?&PerlPostfixUnaryOperator) )?+
    )) # End of rule

        (?<PerlLvalue>   (?<PerlStdLvalue>
            (?>
                \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier)
            |
                \(                                                                     (?>(?&PerlOWS))
                    (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )      (?>(?&PerlOWS))
                    (?:
                        (?>(?&PerlComma))                                              (?>(?&PerlOWS))
                        (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )  (?>(?&PerlOWS))
                    )*+
                    (?: (?>(?&PerlComma)) (?&PerlOWS) )?+
                \)
            )
    )) # End of rule

        (?<PerlTerm>   (?<PerlStdTerm>
            (?>
                (?&PerlReturnExpression)

            # The remaining alternatives can all take postfix dereferencers...
            | (?:
                    (?= \$ )  (?&PerlScalarAccess)
              |
                    (?= \@ )  (?&PerlArrayAccess)
              |
                    (?=  % )  (?&PerlHashAccess)
              |
                    (?&PerlAnonymousSubroutine)
              |
                    (?>(?&PerlNullaryBuiltinFunction))  (?! (?>(?&PerlOWS)) \( )
              |
                    (?&PerlDoBlock) | (?&PerlEvalBlock)
              |
                    (?&PerlCall)
              |
                    (?&PerlVariableDeclaration)
              |
                    (?&PerlTypeglob)
              |
                    (?>(?&PerlParenthesesList))

                    # Can optionally do a [...] lookup straight after the parens,
                    # followd by any number of other look-ups
                    (?:
                        (?>(?&PerlOWS)) (?&PerlArrayIndexer)
                        (?:
                            (?>(?&PerlOWS))
                            (?>
                                (?&PerlArrayIndexer)
                            |   (?&PerlHashIndexer)
                            |   (?&PerlParenthesesList)
                            )
                        )*+
                    )?+
              |
                    (?&PerlAnonymousArray)
              |
                    (?&PerlAnonymousHash)
              |
                    (?&PerlDiamondOperator)
              |
                    (?&PerlContextualMatch)
              |
                    (?&PerlQuotelikeS)
              |
                    (?&PerlQuotelikeTR)
              |
                    (?&PerlQuotelikeQX)
              |
                    (?&PerlLiteral)
              )

              (?: (?&PerlTermPostfixDereference) )?+
            )
    )) # End of rule

        (?<PerlTermPostfixDereference>   (?<PerlStdTermPostfixDereference>
            # Must have at least one arrowed dereference...
            (?:
                (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?>  (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    (?:
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    )*+

                |   # A method call...
                    (?> (?&PerlQualifiedIdentifier) | (?! \$\#\* ) (?&PerlVariableScalar) )
                    (?: (?>(?&PerlOWS)) (?&PerlParenthesesList) )?+

                |   # An array or hash slice or k/v slice
                    # (provided it's not subsequently dereferenced)
                    [\@%] (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS))  [\@%]?+  [\[\{] )

                |   # An array max-index lookup...
                    \$\#\*

                |   # A scalar-, glob-, or subroutine dereference...
                    [\$*&] \*

                |   # An array dereference (provided it's not subsequently dereferenced)...
                    \@\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\[\@] )

                |   # A hash dereference (provided it's not subsequently dereferenced)...
                    \%\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\{%] )

                |   # A glob lookup...
                    \* (?&PerlHashIndexer)
                )
            )++
    )) # End of rule

        (?<PerlControlBlock>   (?<PerlStdControlBlock>
            (?> # Conditionals...
                (?> if | unless ) \b                 (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))          (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    elsif \b                         (?>(?&PerlOWS))
                    (?>(?&PerlParenthesesList))      (?>(?&PerlOWS))
                    (?&PerlBlock)
                )*+

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    else \b                          (?>(?&PerlOWS))
                    (?&PerlBlock)
                )?+

            |   # Loops...
                (?>
                    for(?:each)?+ \b
                    (?>(?&PerlOWS))
                    (?:
                        (?> # Explicitly aliased iterator variable...
                            (?> \\ (?>(?&PerlOWS))  (?> my | our | state )
                            |                       (?> my | our | state )  (?>(?&PerlOWS)) \\
                            )
                            (?>(?&PerlOWS))
                            (?> (?&PerlVariableScalar)
                            |   (?&PerlVariableArray)
                            |   (?&PerlVariableHash)
                            )
                        |
                            # List of scalar iterator variables...
                            my                                   (?>(?&PerlOWS))
                            \(                                   (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                (?: ,                            (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                )*+
                                (?: ,                            (?>(?&PerlOWS)) )?+
                            \)

                        |
                            # Implicitly aliased iterator variable...
                            (?> (?: my | our | state ) (?>(?&PerlOWS)) )?+
                            (?&PerlVariableScalar)
                        )?+
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlQuotelikeQW) )
                    |
                        (?&PPR_X_three_part_list)
                    )
                |
                    (?> while | until) \b (?>(?&PerlOWS))
                    (?&PerlParenthesesList)
                )

                (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                    (?>(?&PerlOWS))   continue
                    (?>(?&PerlOWS))   (?&PerlBlock)
                )?+

            | # Phasers...
                (?> BEGIN | END | CHECK | INIT | UNITCHECK ) \b   (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Try/catch/finallys...
                (?>(?&PerlTryCatchFinallyBlock))

            | # Defers...
                defer                                     (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Switches...
                (?> given | when ) \b                     (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))               (?>(?&PerlOWS))
                (?&PerlBlock)
            |
                default                                   (?>(?&PerlOWS))
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlFormat>   (?<PerlStdFormat>
            format
            (?: (?>(?&PerlNWS))  (?&PerlQualifiedIdentifier)  )?+
                (?>(?&PerlOWS))  = [^\n]*+
                (?&PPR_X_newline_and_heredoc)
            (?:
                (?! \. \n )
                [^\n\$\@]*+
                (?:
                    (?>
                        (?= \$ (?! \s ) )  (?&PerlScalarAccessNoSpace)
                    |
                        (?= \@ (?! \s ) )  (?&PerlArrayAccessNoSpace)
                    )
                    [^\n\$\@]*+
                )*+
                (?&PPR_X_newline_and_heredoc)
            )*+
            \. (?&PerlEndOfLine)
    )) # End of rule

        (?<PerlStatementModifier>   (?<PerlStdStatementModifier>
            (?> if | for(?:each)?+ | while | unless | until | when )
            \b
            (?>(?&PerlOWS))
            (?&PerlExpression)
    )) # End of rule

        (?<PerlBlock>   (?<PerlStdBlock>
            \{  (?>(?&PerlStatementSequence))  \}
    )) # End of rule

        (?<PerlCall>   (?<PerlStdCall>
            (?>
                [&]                                    (?>(?&PerlOWS))
                (?> (?&PerlBlock)
                |   (?&PerlVariableScalar)
                |   (?&PerlQualifiedIdentifier)
                )                                      (?>(?&PerlOWS))
                (?:
                    \(                                 (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))        (?&PerlOWS)   )?+
                    \)
                )?+
            |
                - (?>(?&PPR_X_filetest_name))            (?>(?&PerlOWS))
                (?&PerlPrefixPostfixTerm)?+
            |
                (?>(?&PerlBuiltinFunction))            (?>(?&PerlOWS))
                (?>
                    \(                                 (?>(?&PerlOWS))
                        (?>
                            (?= (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlExpression)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlExpression)
                        |
                            (?&PerlExpression)?+
                        )                              (?>(?&PerlOWS))
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            |
                (?>(?&PPR_X_non_reserved_identifier)) (?>(?&PerlOWS))
                (?>
                    \(                              (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))     (?&PerlOWS)  )?+
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))           (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))        (?&PerlNWS)
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            )
    )) # End of rule

        (?<PerlVariableDeclaration>   (?<PerlStdVariableDeclaration>
            (?> my | our | state ) \b           (?>(?&PerlOWS))
            (?: (?&PerlQualifiedIdentifier)        (?&PerlOWS)  )?+
            (?>(?&PerlLvalue))                  (?>(?&PerlOWS))
            (?&PerlAttributes)?+
    )) # End of rule

        (?<PerlDoBlock>   (?<PerlStdDoBlock>
            do (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlEvalBlock>   (?<PerlStdEvalBlock>
            eval (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlTryCatchFinallyBlock>   (?<PerlStdTryCatchFinallyBlock>

                try \b                                (?>(?&PerlOWS))
                (?>(?&PerlBlock))
                                                      (?>(?&PerlOWS))
                catch \b                              (?>(?&PerlOWS))
                \(  (?>(?&PerlVariableScalar))  \)    (?>(?&PerlOWS))
                (?>(?&PerlBlock))

            (?:
                                                      (?>(?&PerlOWS))
                finally \b                            (?>(?&PerlOWS))
                (?>(?&PerlBlock))
            )?+
    )) # End of rule

        (?<PerlAttributes>   (?<PerlStdAttributes>
            :
            (?>(?&PerlOWS))
            (?>(?&PerlIdentifier))
            (?:
                (?= \( ) (?&PPR_X_quotelike_body)
            )?+

            (?:
                (?> (?>(?&PerlOWS)) : (?&PerlOWS) | (?&PerlNWS) )
                (?>(?&PerlIdentifier))
                (?:
                    (?= \( ) (?&PPR_X_quotelike_body)
                )?+
            )*+
    )) # End of rule

        (?<PerlList>   (?<PerlStdList>
            (?> (?&PerlParenthesesList) | (?&PerlCommaList) )
    )) # End of rule

        (?<PerlParenthesesList>   (?<PerlStdParenthesesList>
            \(  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \)
    )) # End of rule

        (?<PerlAnonymousArray>   (?<PerlStdAnonymousArray>
            \[  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \]
    )) # End of rule

        (?<PerlAnonymousHash>   (?<PerlStdAnonymousHash>
            \{  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+ \}
    )) # End of rule

        (?<PerlArrayIndexer>   (?<PerlStdArrayIndexer>
            \[                          (?>(?&PerlOWS))
                (?>(?&PerlExpression))  (?>(?&PerlOWS))
            \]
    )) # End of rule

        (?<PerlHashIndexer>   (?<PerlStdHashIndexer>
            \{  (?>(?&PerlOWS))
                (?: -?+ (?&PerlIdentifier) | (?&PerlExpression) )  # (Note: MUST allow backtracking here)
                (?>(?&PerlOWS))
            \}
    )) # End of rule

        (?<PerlDiamondOperator>   (?<PerlStdDiamondOperator>
            <<>>    # Perl 5.22 "double diamond"
        |
            < (?! < )
                (?>(?&PPR_X_balanced_angles))
            >
            (?=
                (?>(?&PerlOWSOrEND))
                (?> \z | [,;\}\])?] | => | : (?! :)        # (
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule

        (?<PerlComma>   (?<PerlStdComma>
            (?> , | => )
    )) # End of rule

        (?<PerlPrefixUnaryOperator>   (?<PerlStdPrefixUnaryOperator>
            (?> \+\+ | -- | [!\\+~] | - (?! (?&PPR_X_filetest_name) \b ) )
    )) # End of rule

        (?<PerlPostfixUnaryOperator>   (?<PerlStdPostfixUnaryOperator>
            (?> \+\+  |  -- )
    )) # End of rule

        (?<PerlInfixBinaryOperator>   (?<PerlStdInfixBinaryOperator>
            (?>  [=!][~=]
            |    cmp
            |    <= >?+
            |    >=
            |    [lg][te]
            |    eq
            |    ne
            |    [+]             (?! [+=] )
            |     -              (?! [-=] )
            |    [.]{2,3}+
            |    [.%x]           (?! [=]  )
            |    [&|^][.]        (?! [=]  )
            |    [<>*&|/]{1,2}+  (?! [=]  )
            |    \^              (?! [=]  )
            |    ~~
            |    isa
            )
    )) # End of rule

        (?<PerlAssignmentOperator>   (?<PerlStdAssignmentOperator>
            (?:  [<>*&|/]{2}
            |  [-+.*/%x]
            |  [&|^][.]?+
            )?+
            =
            (?! > )
    )) # End of rule

        (?<PerlLowPrecedenceInfixOperator>   (?<PerlStdLowPrecedenceInfixOperator>
            (?> or | and | xor )
    )) # End of rule

        (?<PerlAnonymousSubroutine>   (?<PerlStdAnonymousSubroutine>
            sub \b
            (?>(?&PerlOWS))
            (?:
                # Perl pre 5.028
                (?:
                    (?>
                        (?&PerlSignature)    # Parameter list
                    |
                        \( [^)]*+ \)         # Prototype (
                    )
                    (?&PerlOWS)
                )?+
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            |
                # Perl post 5.028
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
                (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
            )
            (?&PerlBlock)
    )) # End of rule

        (?<PerlVariable>   (?<PerlStdVariable>
            (?= [\$\@%] )
            (?>
                (?&PerlScalarAccess)
            |   (?&PerlHashAccess)
            |   (?&PerlArrayAccess)
            )
            (?> (?&PerlTermPostfixDereference) )?+
    )) # End of rule

        (?<PerlTypeglob>   (?<PerlStdTypeglob>
            \*
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier))  (?: :: )?+
            |
                (?&PerlVariableScalar)
            |
                [][!"#\$%&'()*+,./:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccess>   (?<PerlStdArrayAccess>
            (?>(?&PerlVariableArray))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccessNoSpace>   (?<PerlStdArrayAccessNoSpace>
            (?>(?&PerlVariableArrayNoSpace))

            # Optional arrowless access(es) to begin
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any number of optional arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlArrayAccessNoSpaceNoArrow>   (?<PerlStdArrayAccessNoSpaceNoArrow>
            (?>(?&PerlVariableArray))
            (?:
                (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
            )*+
    )) # End of rule

        (?<PerlHashAccess>   (?<PerlStdHashAccess>
            (?>(?&PerlVariableHash))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlScalarAccess>   (?<PerlStdScalarAccess>
            (?>(?&PerlVariableScalar))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlScalarAccessNoSpace>   (?<PerlStdScalarAccessNoSpace>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) to begin...
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any nuber of arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlScalarAccessNoSpaceNoArrow>   (?<PerlStdScalarAccessNoSpaceNoArrow>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) (but parens can't be first)...
            (?:
                (?! \( )
                (?:
                    (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlVariableScalar>   (?<PerlStdVariableScalar>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
                (?&PerlOWS)
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ [!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-] \}
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableScalarNoSpace>   (?<PerlStdVariableScalarNoSpace>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableArray>   (?<PerlStdVariableArray>
            \@     (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableArrayNoSpace>   (?<PerlStdVariableArrayNoSpace>
            \@
            (?: \$ )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableHash>   (?<PerlStdVariableHash>
            %      (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)?+
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlLabel>   (?<PerlStdLabel>
            (?! (?> [msy] | q[wrxq]?+ | tr ) \b )
            (?>(?&PerlIdentifier))
            : (?! : )
    )) # End of rule

        (?<PerlLiteral>   (?<PerlStdLiteral>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlNumber)
            |   (?&PerlBareword)
            )
    )) # End of rule

        (?<PerlString>   (?<PerlStdString>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                (?: q \b | qq (?= (?>(?&PerlOWS)) ' ) )
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            |
                qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            |
                (?&PerlHeredoc)
            |
                (?&PerlVString)
            )
    )) # End of rule

        (?<PerlQuotelike>   (?<PerlStdQuotelike>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlQuotelikeQX)
            |   (?&PerlContextualMatch)
            |   (?&PerlQuotelikeS)
            |   (?&PerlQuotelikeTR)
            )
    )) # End of rule

        (?<PerlHeredoc>   (?<PerlStdHeredoc>
            # Match the introducer...
            <<
            (?<_heredoc_indented> [~]?+ )

            # Match the terminator specification...
            (?>
                \\?+   (?<_heredoc_terminator>  (?&PerlIdentifier)              )
            |
                (?>(?&PerlOWS))
                (?>
                    "  (?<_heredoc_terminator>  [^"\\]*+  (?: \\. [^"\\]*+ )*+  )  "  #"
                |
                    (?<PPR_X_HD_nointerp> ' )
                    (?<_heredoc_terminator>  [^'\\]*+  (?: \\. [^'\\]*+ )*+  )  '  #'
                |
                    `  (?<_heredoc_terminator>  [^`\\]*+  (?: \\. [^`\\]*+ )*+  )  `  #`
                )
            |
                    (?<_heredoc_terminator>                                  )
            )

            # Do we need to reset the heredoc cache???
            (?====================================================================================================================================================================================================================================================================)

            # Do we need to cache content lookahead for this heredoc???
            (?(?==============================================================================================================================================================================)

                # Lookahead to detect and remember trailing contents of heredoc
                (?=
                    [^\n]*+ \n                                   # Go to the end of the current line
                    (?==========)                                # Remember the start of the contents
                    (?==========================================)   # Skip earlier heredoc contents
                    (?>                                          # The heredoc contents consist of...
                        (?:
                            (?!
                                (?(?=========================) \h*+ )   # An indent (if it was a <<~)
                                \g{_heredoc_terminator}                 # The terminator
                                (?: \n | \z )                           # At an end-of-line
                            )
                            (?(<PPR_X_HD_nointerp>)
                                [^\n]*+ \n
                            |
                                [^\n\$\@]*+
                                (?:
                                    (?>
                                        (?===========================================)
                                        (?= \$ )  (?&PerlScalarAccess)
                                        (?===============================)
                                    |
                                        (?===========================================)
                                        (?= \@ )  (?&PerlArrayAccess)
                                        (?===============================)
                                    )
                                    [^\n\$\@]*+
                                )*+
                                \n (?==========================================)
                            )
                        )*+

                        (?(?=========================) \h*+ )            # An indent (if it was a <<~)
                        \g{_heredoc_terminator}                          # The specified terminator
                        (?: \n | \z )                                    # Followed by EOL
                    )

                    # Then memoize the skip for when it's subsequently needed by PerlOWS or PerlNWS...
                    (?===============================================================================================================================================================================================================================================================================================================================================================================)
                )
            )

    )) # End of rule

        (?<PerlQuotelikeQ>   (?<PerlStdQuotelikeQ>
            (?>
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                \b q \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQQ>   (?<PerlStdQuotelikeQQ>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                \b qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            )
    )) # End of rule

        (?<PerlQuotelikeQW>   (?<PerlStdQuotelikeQW>
            (?>
                qw \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQX>   (?<PerlStdQuotelikeQX>
            (?>
                `  [^`]*+  (?: \\. [^`]*+ )*+  `
            |
                qx
                    (?>
                        (?= (?>(?&PerlOWS)) ' )
                        (?&PPR_X_quotelike_body)
                    |
                        \b (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                        (?&PPR_X_quotelike_body_interpolated)
                    )
            )
    )) # End of rule

        (?<PerlQuotelikeS>   (?<PerlStdQuotelikeS>
        (?<PerlSubstitution>   (?<PerlStdSubstitution>
            s \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{]                 # )
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_regex_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Single-quoted syntax...
                (?= (?>(?&PerlOWS)) ' )
                (?>(?&PPR_X_regex_body_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Delimited syntax...
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            )
            [msixpodualgcern]*+
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeTR>   (?<PerlStdQuotelikeTR>
        (?<PerlTransliteration>   (?<PerlStdTransliteration>
            (?> tr | y ) \b
            (?! (?>(?&PerlOWS)) => )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{\«]                 # )]
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_quotelike_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Delimited syntax...
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            )
            [cdsr]*+
    )) # End of rule
    )) # End of rule

        (?<PerlContextualQuotelikeM>   (?<PerlStdContextualQuotelikeM>
        (?<PerlContextualMatch>   (?<PerlStdContextualMatch>
            (?<PerlQuotelikeM>
            (?<PerlMatch>
                (?>
                    \/\/
                |
                    (?>
                        m (?= [#] )
                    |
                        m \b
                        (?! (?>(?&PerlOWS)) => )
                    |
                        (?= \/ [^/] )
                    )
                    (?&PPR_X_regex_body_interpolated)
                )
                [msixpodualgcn]*+
            ) # End of rule (?<PerlMatch>)
            ) # End of rule (?<PerlQuotelikeM>)
            (?=
                (?>(?&PerlOWS))
                (?> \z | [,;\}\])?] | => | : (?! :)
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeQR>   (?<PerlStdQuotelikeQR>
            qr \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>(?&PPR_X_regex_body_interpolated))
            [msixpodualn]*+
    )) # End of rule

        (?<PerlRegex>   (?<PerlStdRegex>
            (?>
                (?&PerlMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule

        (?<PerlContextualRegex>   (?<PerlStdContextualRegex>
            (?>
                (?&PerlContextualMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule


        (?<PerlBuiltinFunction>   (?<PerlStdBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?=[^\W\d]) # Skip if possible
            (?>
                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(?>at|udy)|leep|rand|qrt|ay|in)
                | 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)
                | r(?>e(?>ad(?>lin[ek]|pipe|dir)?|(?>quir|vers|nam)e|winddir|turn|set|cv|do|f)|index|mdir|and)
                | c(?>h(?>o(?>m?p|wn)|r(?>oot)?|dir|mod)|o(?>n(?>tinue|nect)|s)|lose(?>dir)?|aller|rypt)
                | e(?>nd(?>(?>hos|ne)t|p(?>roto|w)|serv|gr)ent|x(?>i(?>sts|t)|ec|p)|ach|val(?>bytes)?+|of)
                | l(?>o(?>c(?>al(?>time)?|k)|g)|i(?>sten|nk)|(?>sta|as)t|c(?>first)?|ength)
                | u(?>n(?>(?>lin|pac)k|shift|def|tie)|c(?>first)?|mask|time)
                | p(?>r(?>ototype|intf?)|ack(?>age)?|o[ps]|ipe|ush)
                | d(?>bm(?>close|open)|e(?>fined|lete)|ump|ie|o)
                | f(?>or(?>m(?>line|at)|k)|ileno|cntl|c|lock)
                | t(?>i(?>mes?|ed?)|ell(?>dir)?|runcate)
                | w(?>a(?>it(?>pid)?|ntarray|rn)|rite)
                | m(?>sg(?>ctl|get|rcv|snd)|kdir|ap)
                | b(?>in(?>mode|d)|less|reak)
                | i(?>n(?>dex|t)|mport|octl)
                | a(?>ccept|larm|tan2|bs)
                | o(?>pen(?>dir)?|ct|rd)
                | v(?>alues|ec)
                | k(?>eys|ill)
                | quotemeta
                | join
                | next
                | hex
                | _
            )
            \b
    )) # End of rule

        (?<PerlNullaryBuiltinFunction>   (?<PerlStdNullaryBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?= [^\W\d] )  # Skip if possible
            (?>
                get(?:(?:(?:hos|ne)t|serv|gr)ent|p(?:(?:roto|w)ent|pid)|login)
                | end(?:(?:hos|ne)t|p(?:roto|w)|serv|gr)ent
                | wa(?:ntarray|it)
                | times?
                | fork
                | _
            )
            \b
    )) # End of rule

        (?<PerlVersionNumber>   (?<PerlStdVersionNumber>
            (?>
                (?&PerlVString)
            |
                (?>(?&PPR_X_digit_seq))
                (?: \. (?&PPR_X_digit_seq)?+ )*+
            )
    )) # End of rule

        (?<PerlVString>   (?<PerlStdVString>
            v  (?>(?&PPR_X_digit_seq))  (?: \. (?&PPR_X_digit_seq) )*+
    )) # End of rule

        (?<PerlNumber>   (?<PerlStdNumber>
            [+-]?+
            (?>
                0  (?>  x   (?&PPR_X_x_digit_seq)
                |       b   (?&PPR_X_b_digit_seq)
                |       o?  (?&PPR_X_o_digit_seq)
                )
            |
                (?>
                        (?>(?&PPR_X_digit_seq))
                    (?: \. (?&PPR_X_digit_seq)?+ )?+
                |
                        \. (?&PPR_X_digit_seq)
                )
                (?: [eE] [+-]?+ (?&PPR_X_digit_seq) )?+
            )
    )) # End of rule

        (?<PerlOldQualifiedIdentifier>   (?<PerlStdOldQualifiedIdentifier>
            (?> (?> :: | ' ) \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlQualifiedIdentifier>   (?<PerlStdQualifiedIdentifier>
            (?>     ::       \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlIdentifier>   (?<PerlStdIdentifier>
                                    [^\W\d]\w*+
    )) # End of rule

        (?<PerlBareword>   (?<PerlStdBareword>
            (?! (?> (?= \w )
                    (?> for(?:each)?+ | while | if      | unless | until | use | no
                    |   given         | when  | sub     | return | my    | our | state
                    |   try           | catch | finally | defer
                    )
                |   (?&PPR_X_named_op)
                |   __ (?> END | DATA ) __ \b
                ) \b
                (?! (?>(?&PerlOWS)) => )
            )
            (?! (?> q[qwrx]?+ | [mys] | tr ) \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            )
            (?: :: )?+
            [^\W\d]\w*+
            (?: (?: :: | ' )  [^\W\d]\w*+  )*+
            (?: :: )?+
            (?! \( )    # )
        |
            :: (?! \w | \{ )
    )) # End of rule

        (?<PerlKeyword>   (?<PerlStdKeyword>
            (?!)    # None, by default, but can be overridden in a composing regex
    )) # End of rule

        (?<PerlPodSequence>   (?<PerlStdPodSequence>
            (?>(?&PerlOWS))  (?: (?>(?&PerlPod))  (?&PerlOWS) )*+
    )) # End of rule

        (?<PerlPod>   (?<PerlStdPod>
            ^ = [^\W\d]\w*+             # A line starting with =<identifier>
            .*?                         # Up to the first...
            (?>
                ^ = cut \b [^\n]*+ $    # ...line starting with =cut
            |                           # or
                \z                      # ...EOF
            )
    )) # End of rule


        ##### Whitespace matching (part of API) #################################

        (?<PerlOWSOrEND>   (?<PerlStdOWSOrEND>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            |
                __ (?> END | DATA ) __ \b .*+ \z
            )*+
    )) # End of rule

        (?<PerlOWS>   (?<PerlStdOWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )*+
    )) # End of rule

        (?<PerlNWS>   (?<PerlStdNWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )++
    )) # End of rule

        (?<PerlEndOfLine>   (?<PerlStdEndOfLine>
            \n
    )) # End of rule


        ###### Internal components (not part of API) ##########################

        (?<PPR_X_named_op>
            (?> cmp
            |   [lg][te]
            |   eq
            |   ne
            |   and
            |   or
            |   xor
            )
        ) # End of rule (?<PPR_X_named_op>)

        (?<PPR_X_non_reserved_identifier>
            (?! (?>
                   for(?:each)?+ | while   | if    | unless | until | given | when | default
                |  sub | format  | use     | no    | my     | our   | state
                |  try | catch   | finally | defer
                |  (?&PPR_X_named_op)
                |  [msy] | q[wrxq]?+ | tr
                |   __ (?> END | DATA ) __
                )
                \b
            )
            (?>(?&PerlQualifiedIdentifier))
            (?! :: )
        ) # End of rule (?<PPR_X_non_reserved_identifier>)

        (?<PPR_X_three_part_list>
            \(  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            \)
        ) # End of rule (?<PPR_X_three_part_list>)

        (?<PPR_X_indirect_obj>
            (?&PerlBareword)
        |
            (?>(?&PerlVariableScalar))
            (?! (?>(?&PerlOWS)) (?> [<\[\{] | -> ) )
        ) # End of rule (?<PPR_X_indirect_obj>)

        (?<PPR_X_quotelike_body>
            (?>(?&PPR_X_quotelike_body_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body>)

        (?<PPR_X_balanced_parens>
            [^)(\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^)(\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens>)

        (?<PPR_X_balanced_curlies>
            [^\}\{\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^\}\{\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies>)

        (?<PPR_X_balanced_squares>
            [^][\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?&PPR_X_balanced_squares)  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^][\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares>)

        (?<PPR_X_balanced_angles>
            [^><\\\n]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^><\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles>)

        (?<PPR_X_balanced_unicode_delims>
            (?============================)* <-- HERE +
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                (?============================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims>)

        (?<PPR_X_regex_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))            (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))            (?= \] )
                |
                    \(  (?>
                            \?{1,2}+ (?= \{ )
                            (?>(?&PerlBlock))
                        |
                            (?! \?{1,2}+ \{ )
                            (?>(?&PPR_X_balanced_parens))
                        )                                       (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))              (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_regex_body_unclosed>)

        (?<PPR_X_quotelike_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))        (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))        (?= \] )
                |
                    \(  (?>(?&PPR_X_balanced_parens))         (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))          (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_quotelike_body_unclosed>)

        (?<PPR_X_quotelike_body_interpolated>
            (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated>)

        (?<PPR_X_regex_body_interpolated>
            (?>(?&PPR_X_regex_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_regex_body_interpolated>)

        (?<PPR_X_balanced_parens_regex_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_regex_interpolated>)

        (?<PPR_X_balanced_curlies_regex_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_regex_interpolated>)

        (?<PPR_X_balanced_squares_regex_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\](|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\](|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_regex_interpolated>)

        (?<PPR_X_balanced_angles_regex_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_regex_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_regex_interpolated>)


        (?<PPR_X_balanced_unicode_delims_regex_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=======================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?========================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlScalarAccessNoSpace)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_regex_interpolated>)


        (?<PPR_X_balanced_parens_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_interpolated>)

        (?<PPR_X_balanced_curlies_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_interpolated>)

        (?<PPR_X_balanced_squares_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\]] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\]] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_interpolated>)

        (?<PPR_X_balanced_unicode_delims_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! \s | (?======================) ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! \s | (?======================) ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_interpolated>)

        (?<PPR_X_balanced_angles_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_interpolated>)

        (?<PPR_X_regex_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#|()] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#|()] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_regex_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s|()-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s|()-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_regex_body_unclosed)
        ) # End of rule (?<PPR_X_regex_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_quotelike_body_unclosed)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_s_e_check>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body_interpolated)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check>)

        (?<PPR_X_quotelike_s_e_check_uninterpolated>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check_uninterpolated>)

        (?<PPR_X_filetest_name>   [ABCMORSTWXbcdefgkloprstuwxz]          )

        (?<PPR_X_digit_seq>               \d++ (?: _?+         \d++ )*+  )
        (?<PPR_X_x_digit_seq>     [\da-fA-F]++ (?: _?+ [\da-fA-F]++ )*+  )
        (?<PPR_X_o_digit_seq>          [0-7]++ (?: _?+      [0-7]++ )*+  )
        (?<PPR_X_b_digit_seq>          [0-1]++ (?: _?+      [0-1]++ )*+  )

        (?<PPR_X_newline_and_heredoc>
            \n (?===================================================================================================)
        ) # End of rule (?<PPR_X_newline_and_heredoc>)
    )
    # END OF GRAMMAR
)/ at (eval 33) line 2198.
t/plugin-ellipsis.t ............. 
Dubious, test returned 255 (wstat 65280, 0xff00)
No subtests run 
(?============================)* matches null string many times in regex; marked by <-- HERE in m/(?(DEFINE)

(?<PerlPackageDeclaration>(?<PerlWrapperPackageDeclaration_001>(?&PerlBabbleInnerMatch)|(?&PerlStdPackageDeclaration)))
(?<PerlBabbleInnerMatch>(?<PerlWrapperBabbleInnerMatch_001>((?&PerlStdBabbleInnerMatch))(?================================================================)))
(?<PerlStdBabbleInnerMatch>package
            (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
        (?: (?>(?&PerlNWS)) (?&PerlVersionNumber) )?+
    
            (?>(?&PerlOWSOrEND))
    
        (?> (?&PerlBlock) )
    )

) (?^umsx:
    (?(DEFINE)

        (?<PerlEntireDocument>   (?<PerlStdEntireDocument>
            \A
            (?&PerlDocument)
            (?:
                \Z
            |
                (?(?===========================)
                    (?>(?&PerlOWSOrEND))  (?=======)  ([^\n]++)
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlDocument>   (?<PerlStdDocument>
            \x{FEFF}?+                      # Optional BOM marker
            (?&PerlStatementSequence)
            (?&PerlOWSOrEND)
    )) # End of rule

        (?<PerlStatementSequence>   (?<PerlStdStatementSequence>
            (?>(?&PerlPodSequence))
            (?:
                (?&PerlStatement)
                (?&PerlPodSequence)
            )*+
    )) # End of rule

        (?<PerlStatement>   (?<PerlStdStatement>
            (?>
                (?>(?&PerlPodSequence))
                (?: (?>(?&PerlLabel)) (?&PerlOWSOrEND) )?+
                (?>(?&PerlPodSequence))
                (?>
                    (?&PerlKeyword)
                |
                    (?&PerlSubroutineDeclaration)
                |
                    (?&PerlUseStatement)
                |
                    (?&PerlPackageDeclaration)
                |
                    (?&PerlControlBlock)
                |
                    (?&PerlFormat)
                |
                    (?>(?&PerlExpression))          (?>(?&PerlOWS))
                    (?&PerlStatementModifier)?+     (?>(?&PerlOWSOrEND))
                    (?> ; | (?= \} | \z ))
                |
                    (?&PerlBlock)
                |
                    ;
                )

            | # A yada-yada...
                \.\.\. (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just a label...
                (?>(?&PerlLabel)) (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just an empty statement...
                (?>(?&PerlOWS)) ;

            | # An error (report it, if it's the first)...
                (?(?===========================)
                    (?> (?&PerlOWS) )
                    (?! (?: \} | \z ) )
                    (?=========)
                    ( (?&PerlExpression) (?&PerlOWS) [^\n]++ | [^;\}]++ )
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlSubroutineDeclaration>   (?<PerlStdSubroutineDeclaration>
        (?>
            (?: (?> my | our | state ) \b      (?>(?&PerlOWS)) )?+
            sub \b                             (?>(?&PerlOWS))
            (?>(?&PerlOldQualifiedIdentifier))    (?&PerlOWS)
        |
            AUTOLOAD                              (?&PerlOWS)
        |
            DESTROY                               (?&PerlOWS)
        )
        (?:
            # Perl pre 5.028
            (?:
                (?>
                    (?&PerlSignature)    # Parameter list
                |
                    \( [^)]*+ \)         # Prototype (
                )
                (?&PerlOWS)
            )?+
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
        |
            # Perl post 5.028
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
        )
        (?> ; | (?&PerlBlock) )
    )) # End of rule

        (?<PerlSignature>   (?<PerlStdSignature>
            \(
                (?>(?&PerlOWS))
                (?&PerlParameterDeclaration)*+
            \)
    )) # End of rule

        (?<PerlParameterDeclaration>   (?<PerlStdParameterDeclaration>
            (?:
                    \$  (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)?+ (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableScalar) (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)   (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableArray) (?>(?&PerlOWS))
            |
                (?&PerlVariableHash)  (?>(?&PerlOWS))
            )
            (?: , (?>(?&PerlOWS))  |  (?= \) ) )     # (
    )) # End of rule


        (?<PerlUseStatement>   (?<PerlStdUseStatement>
        (?: use | no ) (?>(?&PerlNWS))
        (?>
            (?&PerlVersionNumber)
        |
            (?>(?&PerlQualifiedIdentifier))
            (?: (?>(?&PerlNWS)) (?&PerlVersionNumber)
                (?! (?>(?&PerlOWS)) (?> (?&PerlInfixBinaryOperator) | (?&PerlComma) | \? ) )
            )?+
            (?: (?>(?&PerlNWS)) (?&PerlPodSequence) )?+
            (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        )
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlReturnExpression>   (?<PerlStdReturnExpression>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
    )) # End of rule

        (?<PerlReturnStatement>   (?<PerlStdReturnStatement>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlPackageDeclaration>   (?<PerlStdPackageDeclaration>
        package
            (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
        (?: (?>(?&PerlNWS)) (?&PerlVersionNumber) )?+
            (?>(?&PerlOWSOrEND)) (?> ; | (?&PerlBlock) | (?= \} | \z ))
    )) # End of rule

        (?<PerlExpression>   (?<PerlStdExpression>
                                (?>(?&PerlLowPrecedenceNotExpression))
            (?: (?>(?&PerlOWS)) (?>(?&PerlLowPrecedenceInfixOperator))
                (?>(?&PerlOWS))    (?&PerlLowPrecedenceNotExpression)  )*+
    )) # End of rule

        (?<PerlLowPrecedenceNotExpression>   (?<PerlStdLowPrecedenceNotExpression>
            (?: not \b (?&PerlOWS) )*+  (?&PerlCommaList)
    )) # End of rule

        (?<PerlCommaList>   (?<PerlStdCommaList>
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            (?:
                (?: (?>(?&PerlComma))          (?&PerlOWS)   )++
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            )*+
                (?: (?>(?&PerlComma))          (?&PerlOWSOrEND)   )*+
    )) # End of rule

        (?<PerlAssignment>   (?<PerlStdAssignment>
                                (?>(?&PerlConditionalExpression))
            (?:
                (?>(?&PerlOWS)) (?>(?&PerlAssignmentOperator))
                (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )*+
    )) # End of rule

        (?<PerlScalarExpression>   (?<PerlStdScalarExpression>
        (?<PerlConditionalExpression>   (?<PerlStdConditionalExpression>
            (?>(?&PerlBinaryExpression))
            (?:
                (?>(?&PerlOWS)) \? (?>(?&PerlOWS)) (?>(?&PerlAssignment))
                (?>(?&PerlOWS))  : (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )?+
    )) # End of rule
    )) # End of rule

        (?<PerlBinaryExpression>   (?<PerlStdBinaryExpression>
                                (?>(?&PerlPrefixPostfixTerm))
            (?: (?>(?&PerlOWS)) (?>(?&PerlInfixBinaryOperator))
                (?>(?&PerlOWS))    (?&PerlPrefixPostfixTerm) )*+
    )) # End of rule

        (?<PerlPrefixPostfixTerm>   (?<PerlStdPrefixPostfixTerm>
            (?: (?>(?&PerlPrefixUnaryOperator))  (?&PerlOWS) )*+
            (?>(?&PerlTerm))
            (?: (?>(?&PerlOWS)) (?&PerlPostfixUnaryOperator) )?+
    )) # End of rule

        (?<PerlLvalue>   (?<PerlStdLvalue>
            (?>
                \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier)
            |
                \(                                                                     (?>(?&PerlOWS))
                    (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )      (?>(?&PerlOWS))
                    (?:
                        (?>(?&PerlComma))                                              (?>(?&PerlOWS))
                        (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )  (?>(?&PerlOWS))
                    )*+
                    (?: (?>(?&PerlComma)) (?&PerlOWS) )?+
                \)
            )
    )) # End of rule

        (?<PerlTerm>   (?<PerlStdTerm>
            (?>
                (?&PerlReturnExpression)

            # The remaining alternatives can all take postfix dereferencers...
            | (?:
                    (?= \$ )  (?&PerlScalarAccess)
              |
                    (?= \@ )  (?&PerlArrayAccess)
              |
                    (?=  % )  (?&PerlHashAccess)
              |
                    (?&PerlAnonymousSubroutine)
              |
                    (?>(?&PerlNullaryBuiltinFunction))  (?! (?>(?&PerlOWS)) \( )
              |
                    (?&PerlDoBlock) | (?&PerlEvalBlock)
              |
                    (?&PerlCall)
              |
                    (?&PerlVariableDeclaration)
              |
                    (?&PerlTypeglob)
              |
                    (?>(?&PerlParenthesesList))

                    # Can optionally do a [...] lookup straight after the parens,
                    # followd by any number of other look-ups
                    (?:
                        (?>(?&PerlOWS)) (?&PerlArrayIndexer)
                        (?:
                            (?>(?&PerlOWS))
                            (?>
                                (?&PerlArrayIndexer)
                            |   (?&PerlHashIndexer)
                            |   (?&PerlParenthesesList)
                            )
                        )*+
                    )?+
              |
                    (?&PerlAnonymousArray)
              |
                    (?&PerlAnonymousHash)
              |
                    (?&PerlDiamondOperator)
              |
                    (?&PerlContextualMatch)
              |
                    (?&PerlQuotelikeS)
              |
                    (?&PerlQuotelikeTR)
              |
                    (?&PerlQuotelikeQX)
              |
                    (?&PerlLiteral)
              )

              (?: (?&PerlTermPostfixDereference) )?+
            )
    )) # End of rule

        (?<PerlTermPostfixDereference>   (?<PerlStdTermPostfixDereference>
            # Must have at least one arrowed dereference...
            (?:
                (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?>  (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    (?:
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    )*+

                |   # A method call...
                    (?> (?&PerlQualifiedIdentifier) | (?! \$\#\* ) (?&PerlVariableScalar) )
                    (?: (?>(?&PerlOWS)) (?&PerlParenthesesList) )?+

                |   # An array or hash slice or k/v slice
                    # (provided it's not subsequently dereferenced)
                    [\@%] (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS))  [\@%]?+  [\[\{] )

                |   # An array max-index lookup...
                    \$\#\*

                |   # A scalar-, glob-, or subroutine dereference...
                    [\$*&] \*

                |   # An array dereference (provided it's not subsequently dereferenced)...
                    \@\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\[\@] )

                |   # A hash dereference (provided it's not subsequently dereferenced)...
                    \%\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\{%] )

                |   # A glob lookup...
                    \* (?&PerlHashIndexer)
                )
            )++
    )) # End of rule

        (?<PerlControlBlock>   (?<PerlStdControlBlock>
            (?> # Conditionals...
                (?> if | unless ) \b                 (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))          (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    elsif \b                         (?>(?&PerlOWS))
                    (?>(?&PerlParenthesesList))      (?>(?&PerlOWS))
                    (?&PerlBlock)
                )*+

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    else \b                          (?>(?&PerlOWS))
                    (?&PerlBlock)
                )?+

            |   # Loops...
                (?>
                    for(?:each)?+ \b
                    (?>(?&PerlOWS))
                    (?:
                        (?> # Explicitly aliased iterator variable...
                            (?> \\ (?>(?&PerlOWS))  (?> my | our | state )
                            |                       (?> my | our | state )  (?>(?&PerlOWS)) \\
                            )
                            (?>(?&PerlOWS))
                            (?> (?&PerlVariableScalar)
                            |   (?&PerlVariableArray)
                            |   (?&PerlVariableHash)
                            )
                        |
                            # List of scalar iterator variables...
                            my                                   (?>(?&PerlOWS))
                            \(                                   (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                (?: ,                            (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                )*+
                                (?: ,                            (?>(?&PerlOWS)) )?+
                            \)

                        |
                            # Implicitly aliased iterator variable...
                            (?> (?: my | our | state ) (?>(?&PerlOWS)) )?+
                            (?&PerlVariableScalar)
                        )?+
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlQuotelikeQW) )
                    |
                        (?&PPR_X_three_part_list)
                    )
                |
                    (?> while | until) \b (?>(?&PerlOWS))
                    (?&PerlParenthesesList)
                )

                (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                    (?>(?&PerlOWS))   continue
                    (?>(?&PerlOWS))   (?&PerlBlock)
                )?+

            | # Phasers...
                (?> BEGIN | END | CHECK | INIT | UNITCHECK ) \b   (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Try/catch/finallys...
                (?>(?&PerlTryCatchFinallyBlock))

            | # Defers...
                defer                                     (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Switches...
                (?> given | when ) \b                     (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))               (?>(?&PerlOWS))
                (?&PerlBlock)
            |
                default                                   (?>(?&PerlOWS))
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlFormat>   (?<PerlStdFormat>
            format
            (?: (?>(?&PerlNWS))  (?&PerlQualifiedIdentifier)  )?+
                (?>(?&PerlOWS))  = [^\n]*+
                (?&PPR_X_newline_and_heredoc)
            (?:
                (?! \. \n )
                [^\n\$\@]*+
                (?:
                    (?>
                        (?= \$ (?! \s ) )  (?&PerlScalarAccessNoSpace)
                    |
                        (?= \@ (?! \s ) )  (?&PerlArrayAccessNoSpace)
                    )
                    [^\n\$\@]*+
                )*+
                (?&PPR_X_newline_and_heredoc)
            )*+
            \. (?&PerlEndOfLine)
    )) # End of rule

        (?<PerlStatementModifier>   (?<PerlStdStatementModifier>
            (?> if | for(?:each)?+ | while | unless | until | when )
            \b
            (?>(?&PerlOWS))
            (?&PerlExpression)
    )) # End of rule

        (?<PerlBlock>   (?<PerlStdBlock>
            \{  (?>(?&PerlStatementSequence))  \}
    )) # End of rule

        (?<PerlCall>   (?<PerlStdCall>
            (?>
                [&]                                    (?>(?&PerlOWS))
                (?> (?&PerlBlock)
                |   (?&PerlVariableScalar)
                |   (?&PerlQualifiedIdentifier)
                )                                      (?>(?&PerlOWS))
                (?:
                    \(                                 (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))        (?&PerlOWS)   )?+
                    \)
                )?+
            |
                - (?>(?&PPR_X_filetest_name))            (?>(?&PerlOWS))
                (?&PerlPrefixPostfixTerm)?+
            |
                (?>(?&PerlBuiltinFunction))            (?>(?&PerlOWS))
                (?>
                    \(                                 (?>(?&PerlOWS))
                        (?>
                            (?= (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlExpression)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlExpression)
                        |
                            (?&PerlExpression)?+
                        )                              (?>(?&PerlOWS))
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            |
                (?>(?&PPR_X_non_reserved_identifier)) (?>(?&PerlOWS))
                (?>
                    \(                              (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))     (?&PerlOWS)  )?+
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))           (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))        (?&PerlNWS)
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            )
    )) # End of rule

        (?<PerlVariableDeclaration>   (?<PerlStdVariableDeclaration>
            (?> my | our | state ) \b           (?>(?&PerlOWS))
            (?: (?&PerlQualifiedIdentifier)        (?&PerlOWS)  )?+
            (?>(?&PerlLvalue))                  (?>(?&PerlOWS))
            (?&PerlAttributes)?+
    )) # End of rule

        (?<PerlDoBlock>   (?<PerlStdDoBlock>
            do (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlEvalBlock>   (?<PerlStdEvalBlock>
            eval (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlTryCatchFinallyBlock>   (?<PerlStdTryCatchFinallyBlock>

                try \b                                (?>(?&PerlOWS))
                (?>(?&PerlBlock))
                                                      (?>(?&PerlOWS))
                catch \b                              (?>(?&PerlOWS))
                \(  (?>(?&PerlVariableScalar))  \)    (?>(?&PerlOWS))
                (?>(?&PerlBlock))

            (?:
                                                      (?>(?&PerlOWS))
                finally \b                            (?>(?&PerlOWS))
                (?>(?&PerlBlock))
            )?+
    )) # End of rule

        (?<PerlAttributes>   (?<PerlStdAttributes>
            :
            (?>(?&PerlOWS))
            (?>(?&PerlIdentifier))
            (?:
                (?= \( ) (?&PPR_X_quotelike_body)
            )?+

            (?:
                (?> (?>(?&PerlOWS)) : (?&PerlOWS) | (?&PerlNWS) )
                (?>(?&PerlIdentifier))
                (?:
                    (?= \( ) (?&PPR_X_quotelike_body)
                )?+
            )*+
    )) # End of rule

        (?<PerlList>   (?<PerlStdList>
            (?> (?&PerlParenthesesList) | (?&PerlCommaList) )
    )) # End of rule

        (?<PerlParenthesesList>   (?<PerlStdParenthesesList>
            \(  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \)
    )) # End of rule

        (?<PerlAnonymousArray>   (?<PerlStdAnonymousArray>
            \[  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \]
    )) # End of rule

        (?<PerlAnonymousHash>   (?<PerlStdAnonymousHash>
            \{  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+ \}
    )) # End of rule

        (?<PerlArrayIndexer>   (?<PerlStdArrayIndexer>
            \[                          (?>(?&PerlOWS))
                (?>(?&PerlExpression))  (?>(?&PerlOWS))
            \]
    )) # End of rule

        (?<PerlHashIndexer>   (?<PerlStdHashIndexer>
            \{  (?>(?&PerlOWS))
                (?: -?+ (?&PerlIdentifier) | (?&PerlExpression) )  # (Note: MUST allow backtracking here)
                (?>(?&PerlOWS))
            \}
    )) # End of rule

        (?<PerlDiamondOperator>   (?<PerlStdDiamondOperator>
            <<>>    # Perl 5.22 "double diamond"
        |
            < (?! < )
                (?>(?&PPR_X_balanced_angles))
            >
            (?=
                (?>(?&PerlOWSOrEND))
                (?> \z | [,;\}\])?] | => | : (?! :)        # (
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule

        (?<PerlComma>   (?<PerlStdComma>
            (?> , | => )
    )) # End of rule

        (?<PerlPrefixUnaryOperator>   (?<PerlStdPrefixUnaryOperator>
            (?> \+\+ | -- | [!\\+~] | - (?! (?&PPR_X_filetest_name) \b ) )
    )) # End of rule

        (?<PerlPostfixUnaryOperator>   (?<PerlStdPostfixUnaryOperator>
            (?> \+\+  |  -- )
    )) # End of rule

        (?<PerlInfixBinaryOperator>   (?<PerlStdInfixBinaryOperator>
            (?>  [=!][~=]
            |    cmp
            |    <= >?+
            |    >=
            |    [lg][te]
            |    eq
            |    ne
            |    [+]             (?! [+=] )
            |     -              (?! [-=] )
            |    [.]{2,3}+
            |    [.%x]           (?! [=]  )
            |    [&|^][.]        (?! [=]  )
            |    [<>*&|/]{1,2}+  (?! [=]  )
            |    \^              (?! [=]  )
            |    ~~
            |    isa
            )
    )) # End of rule

        (?<PerlAssignmentOperator>   (?<PerlStdAssignmentOperator>
            (?:  [<>*&|/]{2}
            |  [-+.*/%x]
            |  [&|^][.]?+
            )?+
            =
            (?! > )
    )) # End of rule

        (?<PerlLowPrecedenceInfixOperator>   (?<PerlStdLowPrecedenceInfixOperator>
            (?> or | and | xor )
    )) # End of rule

        (?<PerlAnonymousSubroutine>   (?<PerlStdAnonymousSubroutine>
            sub \b
            (?>(?&PerlOWS))
            (?:
                # Perl pre 5.028
                (?:
                    (?>
                        (?&PerlSignature)    # Parameter list
                    |
                        \( [^)]*+ \)         # Prototype (
                    )
                    (?&PerlOWS)
                )?+
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            |
                # Perl post 5.028
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
                (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
            )
            (?&PerlBlock)
    )) # End of rule

        (?<PerlVariable>   (?<PerlStdVariable>
            (?= [\$\@%] )
            (?>
                (?&PerlScalarAccess)
            |   (?&PerlHashAccess)
            |   (?&PerlArrayAccess)
            )
            (?> (?&PerlTermPostfixDereference) )?+
    )) # End of rule

        (?<PerlTypeglob>   (?<PerlStdTypeglob>
            \*
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier))  (?: :: )?+
            |
                (?&PerlVariableScalar)
            |
                [][!"#\$%&'()*+,./:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccess>   (?<PerlStdArrayAccess>
            (?>(?&PerlVariableArray))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccessNoSpace>   (?<PerlStdArrayAccessNoSpace>
            (?>(?&PerlVariableArrayNoSpace))

            # Optional arrowless access(es) to begin
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any number of optional arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlArrayAccessNoSpaceNoArrow>   (?<PerlStdArrayAccessNoSpaceNoArrow>
            (?>(?&PerlVariableArray))
            (?:
                (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
            )*+
    )) # End of rule

        (?<PerlHashAccess>   (?<PerlStdHashAccess>
            (?>(?&PerlVariableHash))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlScalarAccess>   (?<PerlStdScalarAccess>
            (?>(?&PerlVariableScalar))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlScalarAccessNoSpace>   (?<PerlStdScalarAccessNoSpace>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) to begin...
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any nuber of arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlScalarAccessNoSpaceNoArrow>   (?<PerlStdScalarAccessNoSpaceNoArrow>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) (but parens can't be first)...
            (?:
                (?! \( )
                (?:
                    (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlVariableScalar>   (?<PerlStdVariableScalar>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
                (?&PerlOWS)
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ [!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-] \}
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableScalarNoSpace>   (?<PerlStdVariableScalarNoSpace>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableArray>   (?<PerlStdVariableArray>
            \@     (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableArrayNoSpace>   (?<PerlStdVariableArrayNoSpace>
            \@
            (?: \$ )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableHash>   (?<PerlStdVariableHash>
            %      (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)?+
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlLabel>   (?<PerlStdLabel>
            (?! (?> [msy] | q[wrxq]?+ | tr ) \b )
            (?>(?&PerlIdentifier))
            : (?! : )
    )) # End of rule

        (?<PerlLiteral>   (?<PerlStdLiteral>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlNumber)
            |   (?&PerlBareword)
            )
    )) # End of rule

        (?<PerlString>   (?<PerlStdString>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                (?: q \b | qq (?= (?>(?&PerlOWS)) ' ) )
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            |
                qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            |
                (?&PerlHeredoc)
            |
                (?&PerlVString)
            )
    )) # End of rule

        (?<PerlQuotelike>   (?<PerlStdQuotelike>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlQuotelikeQX)
            |   (?&PerlContextualMatch)
            |   (?&PerlQuotelikeS)
            |   (?&PerlQuotelikeTR)
            )
    )) # End of rule

        (?<PerlHeredoc>   (?<PerlStdHeredoc>
            # Match the introducer...
            <<
            (?<_heredoc_indented> [~]?+ )

            # Match the terminator specification...
            (?>
                \\?+   (?<_heredoc_terminator>  (?&PerlIdentifier)              )
            |
                (?>(?&PerlOWS))
                (?>
                    "  (?<_heredoc_terminator>  [^"\\]*+  (?: \\. [^"\\]*+ )*+  )  "  #"
                |
                    (?<PPR_X_HD_nointerp> ' )
                    (?<_heredoc_terminator>  [^'\\]*+  (?: \\. [^'\\]*+ )*+  )  '  #'
                |
                    `  (?<_heredoc_terminator>  [^`\\]*+  (?: \\. [^`\\]*+ )*+  )  `  #`
                )
            |
                    (?<_heredoc_terminator>                                  )
            )

            # Do we need to reset the heredoc cache???
            (?====================================================================================================================================================================================================================================================================)

            # Do we need to cache content lookahead for this heredoc???
            (?(?==============================================================================================================================================================================)

                # Lookahead to detect and remember trailing contents of heredoc
                (?=
                    [^\n]*+ \n                                   # Go to the end of the current line
                    (?==========)                                # Remember the start of the contents
                    (?==========================================)   # Skip earlier heredoc contents
                    (?>                                          # The heredoc contents consist of...
                        (?:
                            (?!
                                (?(?=========================) \h*+ )   # An indent (if it was a <<~)
                                \g{_heredoc_terminator}                 # The terminator
                                (?: \n | \z )                           # At an end-of-line
                            )
                            (?(<PPR_X_HD_nointerp>)
                                [^\n]*+ \n
                            |
                                [^\n\$\@]*+
                                (?:
                                    (?>
                                        (?===========================================)
                                        (?= \$ )  (?&PerlScalarAccess)
                                        (?===============================)
                                    |
                                        (?===========================================)
                                        (?= \@ )  (?&PerlArrayAccess)
                                        (?===============================)
                                    )
                                    [^\n\$\@]*+
                                )*+
                                \n (?==========================================)
                            )
                        )*+

                        (?(?=========================) \h*+ )            # An indent (if it was a <<~)
                        \g{_heredoc_terminator}                          # The specified terminator
                        (?: \n | \z )                                    # Followed by EOL
                    )

                    # Then memoize the skip for when it's subsequently needed by PerlOWS or PerlNWS...
                    (?===============================================================================================================================================================================================================================================================================================================================================================================)
                )
            )

    )) # End of rule

        (?<PerlQuotelikeQ>   (?<PerlStdQuotelikeQ>
            (?>
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                \b q \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQQ>   (?<PerlStdQuotelikeQQ>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                \b qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            )
    )) # End of rule

        (?<PerlQuotelikeQW>   (?<PerlStdQuotelikeQW>
            (?>
                qw \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQX>   (?<PerlStdQuotelikeQX>
            (?>
                `  [^`]*+  (?: \\. [^`]*+ )*+  `
            |
                qx
                    (?>
                        (?= (?>(?&PerlOWS)) ' )
                        (?&PPR_X_quotelike_body)
                    |
                        \b (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                        (?&PPR_X_quotelike_body_interpolated)
                    )
            )
    )) # End of rule

        (?<PerlQuotelikeS>   (?<PerlStdQuotelikeS>
        (?<PerlSubstitution>   (?<PerlStdSubstitution>
            s \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{]                 # )
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_regex_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Single-quoted syntax...
                (?= (?>(?&PerlOWS)) ' )
                (?>(?&PPR_X_regex_body_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Delimited syntax...
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            )
            [msixpodualgcern]*+
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeTR>   (?<PerlStdQuotelikeTR>
        (?<PerlTransliteration>   (?<PerlStdTransliteration>
            (?> tr | y ) \b
            (?! (?>(?&PerlOWS)) => )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{\«]                 # )]
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_quotelike_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Delimited syntax...
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            )
            [cdsr]*+
    )) # End of rule
    )) # End of rule

        (?<PerlContextualQuotelikeM>   (?<PerlStdContextualQuotelikeM>
        (?<PerlContextualMatch>   (?<PerlStdContextualMatch>
            (?<PerlQuotelikeM>
            (?<PerlMatch>
                (?>
                    \/\/
                |
                    (?>
                        m (?= [#] )
                    |
                        m \b
                        (?! (?>(?&PerlOWS)) => )
                    |
                        (?= \/ [^/] )
                    )
                    (?&PPR_X_regex_body_interpolated)
                )
                [msixpodualgcn]*+
            ) # End of rule (?<PerlMatch>)
            ) # End of rule (?<PerlQuotelikeM>)
            (?=
                (?>(?&PerlOWS))
                (?> \z | [,;\}\])?] | => | : (?! :)
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeQR>   (?<PerlStdQuotelikeQR>
            qr \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>(?&PPR_X_regex_body_interpolated))
            [msixpodualn]*+
    )) # End of rule

        (?<PerlRegex>   (?<PerlStdRegex>
            (?>
                (?&PerlMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule

        (?<PerlContextualRegex>   (?<PerlStdContextualRegex>
            (?>
                (?&PerlContextualMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule


        (?<PerlBuiltinFunction>   (?<PerlStdBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?=[^\W\d]) # Skip if possible
            (?>
                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(?>at|udy)|leep|rand|qrt|ay|in)
                | 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)
                | r(?>e(?>ad(?>lin[ek]|pipe|dir)?|(?>quir|vers|nam)e|winddir|turn|set|cv|do|f)|index|mdir|and)
                | c(?>h(?>o(?>m?p|wn)|r(?>oot)?|dir|mod)|o(?>n(?>tinue|nect)|s)|lose(?>dir)?|aller|rypt)
                | e(?>nd(?>(?>hos|ne)t|p(?>roto|w)|serv|gr)ent|x(?>i(?>sts|t)|ec|p)|ach|val(?>bytes)?+|of)
                | l(?>o(?>c(?>al(?>time)?|k)|g)|i(?>sten|nk)|(?>sta|as)t|c(?>first)?|ength)
                | u(?>n(?>(?>lin|pac)k|shift|def|tie)|c(?>first)?|mask|time)
                | p(?>r(?>ototype|intf?)|ack(?>age)?|o[ps]|ipe|ush)
                | d(?>bm(?>close|open)|e(?>fined|lete)|ump|ie|o)
                | f(?>or(?>m(?>line|at)|k)|ileno|cntl|c|lock)
                | t(?>i(?>mes?|ed?)|ell(?>dir)?|runcate)
                | w(?>a(?>it(?>pid)?|ntarray|rn)|rite)
                | m(?>sg(?>ctl|get|rcv|snd)|kdir|ap)
                | b(?>in(?>mode|d)|less|reak)
                | i(?>n(?>dex|t)|mport|octl)
                | a(?>ccept|larm|tan2|bs)
                | o(?>pen(?>dir)?|ct|rd)
                | v(?>alues|ec)
                | k(?>eys|ill)
                | quotemeta
                | join
                | next
                | hex
                | _
            )
            \b
    )) # End of rule

        (?<PerlNullaryBuiltinFunction>   (?<PerlStdNullaryBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?= [^\W\d] )  # Skip if possible
            (?>
                get(?:(?:(?:hos|ne)t|serv|gr)ent|p(?:(?:roto|w)ent|pid)|login)
                | end(?:(?:hos|ne)t|p(?:roto|w)|serv|gr)ent
                | wa(?:ntarray|it)
                | times?
                | fork
                | _
            )
            \b
    )) # End of rule

        (?<PerlVersionNumber>   (?<PerlStdVersionNumber>
            (?>
                (?&PerlVString)
            |
                (?>(?&PPR_X_digit_seq))
                (?: \. (?&PPR_X_digit_seq)?+ )*+
            )
    )) # End of rule

        (?<PerlVString>   (?<PerlStdVString>
            v  (?>(?&PPR_X_digit_seq))  (?: \. (?&PPR_X_digit_seq) )*+
    )) # End of rule

        (?<PerlNumber>   (?<PerlStdNumber>
            [+-]?+
            (?>
                0  (?>  x   (?&PPR_X_x_digit_seq)
                |       b   (?&PPR_X_b_digit_seq)
                |       o?  (?&PPR_X_o_digit_seq)
                )
            |
                (?>
                        (?>(?&PPR_X_digit_seq))
                    (?: \. (?&PPR_X_digit_seq)?+ )?+
                |
                        \. (?&PPR_X_digit_seq)
                )
                (?: [eE] [+-]?+ (?&PPR_X_digit_seq) )?+
            )
    )) # End of rule

        (?<PerlOldQualifiedIdentifier>   (?<PerlStdOldQualifiedIdentifier>
            (?> (?> :: | ' ) \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlQualifiedIdentifier>   (?<PerlStdQualifiedIdentifier>
            (?>     ::       \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlIdentifier>   (?<PerlStdIdentifier>
                                    [^\W\d]\w*+
    )) # End of rule

        (?<PerlBareword>   (?<PerlStdBareword>
            (?! (?> (?= \w )
                    (?> for(?:each)?+ | while | if      | unless | until | use | no
                    |   given         | when  | sub     | return | my    | our | state
                    |   try           | catch | finally | defer
                    )
                |   (?&PPR_X_named_op)
                |   __ (?> END | DATA ) __ \b
                ) \b
                (?! (?>(?&PerlOWS)) => )
            )
            (?! (?> q[qwrx]?+ | [mys] | tr ) \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            )
            (?: :: )?+
            [^\W\d]\w*+
            (?: (?: :: | ' )  [^\W\d]\w*+  )*+
            (?: :: )?+
            (?! \( )    # )
        |
            :: (?! \w | \{ )
    )) # End of rule

        (?<PerlKeyword>   (?<PerlStdKeyword>
            (?!)    # None, by default, but can be overridden in a composing regex
    )) # End of rule

        (?<PerlPodSequence>   (?<PerlStdPodSequence>
            (?>(?&PerlOWS))  (?: (?>(?&PerlPod))  (?&PerlOWS) )*+
    )) # End of rule

        (?<PerlPod>   (?<PerlStdPod>
            ^ = [^\W\d]\w*+             # A line starting with =<identifier>
            .*?                         # Up to the first...
            (?>
                ^ = cut \b [^\n]*+ $    # ...line starting with =cut
            |                           # or
                \z                      # ...EOF
            )
    )) # End of rule


        ##### Whitespace matching (part of API) #################################

        (?<PerlOWSOrEND>   (?<PerlStdOWSOrEND>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            |
                __ (?> END | DATA ) __ \b .*+ \z
            )*+
    )) # End of rule

        (?<PerlOWS>   (?<PerlStdOWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )*+
    )) # End of rule

        (?<PerlNWS>   (?<PerlStdNWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )++
    )) # End of rule

        (?<PerlEndOfLine>   (?<PerlStdEndOfLine>
            \n
    )) # End of rule


        ###### Internal components (not part of API) ##########################

        (?<PPR_X_named_op>
            (?> cmp
            |   [lg][te]
            |   eq
            |   ne
            |   and
            |   or
            |   xor
            )
        ) # End of rule (?<PPR_X_named_op>)

        (?<PPR_X_non_reserved_identifier>
            (?! (?>
                   for(?:each)?+ | while   | if    | unless | until | given | when | default
                |  sub | format  | use     | no    | my     | our   | state
                |  try | catch   | finally | defer
                |  (?&PPR_X_named_op)
                |  [msy] | q[wrxq]?+ | tr
                |   __ (?> END | DATA ) __
                )
                \b
            )
            (?>(?&PerlQualifiedIdentifier))
            (?! :: )
        ) # End of rule (?<PPR_X_non_reserved_identifier>)

        (?<PPR_X_three_part_list>
            \(  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            \)
        ) # End of rule (?<PPR_X_three_part_list>)

        (?<PPR_X_indirect_obj>
            (?&PerlBareword)
        |
            (?>(?&PerlVariableScalar))
            (?! (?>(?&PerlOWS)) (?> [<\[\{] | -> ) )
        ) # End of rule (?<PPR_X_indirect_obj>)

        (?<PPR_X_quotelike_body>
            (?>(?&PPR_X_quotelike_body_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body>)

        (?<PPR_X_balanced_parens>
            [^)(\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^)(\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens>)

        (?<PPR_X_balanced_curlies>
            [^\}\{\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^\}\{\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies>)

        (?<PPR_X_balanced_squares>
            [^][\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?&PPR_X_balanced_squares)  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^][\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares>)

        (?<PPR_X_balanced_angles>
            [^><\\\n]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^><\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles>)

        (?<PPR_X_balanced_unicode_delims>
            (?============================)* <-- HERE +
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                (?============================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims>)

        (?<PPR_X_regex_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))            (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))            (?= \] )
                |
                    \(  (?>
                            \?{1,2}+ (?= \{ )
                            (?>(?&PerlBlock))
                        |
                            (?! \?{1,2}+ \{ )
                            (?>(?&PPR_X_balanced_parens))
                        )                                       (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))              (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_regex_body_unclosed>)

        (?<PPR_X_quotelike_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))        (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))        (?= \] )
                |
                    \(  (?>(?&PPR_X_balanced_parens))         (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))          (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_quotelike_body_unclosed>)

        (?<PPR_X_quotelike_body_interpolated>
            (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated>)

        (?<PPR_X_regex_body_interpolated>
            (?>(?&PPR_X_regex_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_regex_body_interpolated>)

        (?<PPR_X_balanced_parens_regex_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_regex_interpolated>)

        (?<PPR_X_balanced_curlies_regex_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_regex_interpolated>)

        (?<PPR_X_balanced_squares_regex_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\](|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\](|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_regex_interpolated>)

        (?<PPR_X_balanced_angles_regex_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_regex_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_regex_interpolated>)


        (?<PPR_X_balanced_unicode_delims_regex_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=======================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?========================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlScalarAccessNoSpace)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_regex_interpolated>)


        (?<PPR_X_balanced_parens_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_interpolated>)

        (?<PPR_X_balanced_curlies_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_interpolated>)

        (?<PPR_X_balanced_squares_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\]] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\]] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_interpolated>)

        (?<PPR_X_balanced_unicode_delims_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! \s | (?======================) ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! \s | (?======================) ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_interpolated>)

        (?<PPR_X_balanced_angles_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_interpolated>)

        (?<PPR_X_regex_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#|()] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#|()] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_regex_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s|()-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s|()-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_regex_body_unclosed)
        ) # End of rule (?<PPR_X_regex_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_quotelike_body_unclosed)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_s_e_check>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body_interpolated)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check>)

        (?<PPR_X_quotelike_s_e_check_uninterpolated>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check_uninterpolated>)

        (?<PPR_X_filetest_name>   [ABCMORSTWXbcdefgkloprstuwxz]          )

        (?<PPR_X_digit_seq>               \d++ (?: _?+         \d++ )*+  )
        (?<PPR_X_x_digit_seq>     [\da-fA-F]++ (?: _?+ [\da-fA-F]++ )*+  )
        (?<PPR_X_o_digit_seq>          [0-7]++ (?: _?+      [0-7]++ )*+  )
        (?<PPR_X_b_digit_seq>          [0-1]++ (?: _?+      [0-1]++ )*+  )

        (?<PPR_X_newline_and_heredoc>
            \n (?===================================================================================================)
        ) # End of rule (?<PPR_X_newline_and_heredoc>)
    )
    # END OF GRAMMAR
)/ at (eval 33) line 2205.
t/plugin-packageblock.t ......... 
Dubious, test returned 255 (wstat 65280, 0xff00)
No subtests run 
(?============================)* matches null string many times in regex; marked by <-- HERE in m/(?(DEFINE)

(?<PerlPackageDeclaration>(?<PerlWrapperPackageDeclaration_001>(?&PerlBabbleInnerMatch)|(?&PerlStdPackageDeclaration)))
(?<PerlBabbleInnerMatch>(?<PerlWrapperBabbleInnerMatch_001>((?&PerlStdBabbleInnerMatch))(?================================================================)))
(?<PerlStdBabbleInnerMatch>
        package
            (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
    
        (?>(?&PerlNWS))
    
        (?&PerlVersionNumber)
    
            (?>(?&PerlOWSOrEND))
    
            (?> ; | (?&PerlBlock) | (?= \} | \z ))
    )

) (?^umsx:
    (?(DEFINE)

        (?<PerlEntireDocument>   (?<PerlStdEntireDocument>
            \A
            (?&PerlDocument)
            (?:
                \Z
            |
                (?(?===========================)
                    (?>(?&PerlOWSOrEND))  (?=======)  ([^\n]++)
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlDocument>   (?<PerlStdDocument>
            \x{FEFF}?+                      # Optional BOM marker
            (?&PerlStatementSequence)
            (?&PerlOWSOrEND)
    )) # End of rule

        (?<PerlStatementSequence>   (?<PerlStdStatementSequence>
            (?>(?&PerlPodSequence))
            (?:
                (?&PerlStatement)
                (?&PerlPodSequence)
            )*+
    )) # End of rule

        (?<PerlStatement>   (?<PerlStdStatement>
            (?>
                (?>(?&PerlPodSequence))
                (?: (?>(?&PerlLabel)) (?&PerlOWSOrEND) )?+
                (?>(?&PerlPodSequence))
                (?>
                    (?&PerlKeyword)
                |
                    (?&PerlSubroutineDeclaration)
                |
                    (?&PerlUseStatement)
                |
                    (?&PerlPackageDeclaration)
                |
                    (?&PerlControlBlock)
                |
                    (?&PerlFormat)
                |
                    (?>(?&PerlExpression))          (?>(?&PerlOWS))
                    (?&PerlStatementModifier)?+     (?>(?&PerlOWSOrEND))
                    (?> ; | (?= \} | \z ))
                |
                    (?&PerlBlock)
                |
                    ;
                )

            | # A yada-yada...
                \.\.\. (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just a label...
                (?>(?&PerlLabel)) (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just an empty statement...
                (?>(?&PerlOWS)) ;

            | # An error (report it, if it's the first)...
                (?(?===========================)
                    (?> (?&PerlOWS) )
                    (?! (?: \} | \z ) )
                    (?=========)
                    ( (?&PerlExpression) (?&PerlOWS) [^\n]++ | [^;\}]++ )
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlSubroutineDeclaration>   (?<PerlStdSubroutineDeclaration>
        (?>
            (?: (?> my | our | state ) \b      (?>(?&PerlOWS)) )?+
            sub \b                             (?>(?&PerlOWS))
            (?>(?&PerlOldQualifiedIdentifier))    (?&PerlOWS)
        |
            AUTOLOAD                              (?&PerlOWS)
        |
            DESTROY                               (?&PerlOWS)
        )
        (?:
            # Perl pre 5.028
            (?:
                (?>
                    (?&PerlSignature)    # Parameter list
                |
                    \( [^)]*+ \)         # Prototype (
                )
                (?&PerlOWS)
            )?+
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
        |
            # Perl post 5.028
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
        )
        (?> ; | (?&PerlBlock) )
    )) # End of rule

        (?<PerlSignature>   (?<PerlStdSignature>
            \(
                (?>(?&PerlOWS))
                (?&PerlParameterDeclaration)*+
            \)
    )) # End of rule

        (?<PerlParameterDeclaration>   (?<PerlStdParameterDeclaration>
            (?:
                    \$  (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)?+ (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableScalar) (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)   (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableArray) (?>(?&PerlOWS))
            |
                (?&PerlVariableHash)  (?>(?&PerlOWS))
            )
            (?: , (?>(?&PerlOWS))  |  (?= \) ) )     # (
    )) # End of rule


        (?<PerlUseStatement>   (?<PerlStdUseStatement>
        (?: use | no ) (?>(?&PerlNWS))
        (?>
            (?&PerlVersionNumber)
        |
            (?>(?&PerlQualifiedIdentifier))
            (?: (?>(?&PerlNWS)) (?&PerlVersionNumber)
                (?! (?>(?&PerlOWS)) (?> (?&PerlInfixBinaryOperator) | (?&PerlComma) | \? ) )
            )?+
            (?: (?>(?&PerlNWS)) (?&PerlPodSequence) )?+
            (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        )
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlReturnExpression>   (?<PerlStdReturnExpression>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
    )) # End of rule

        (?<PerlReturnStatement>   (?<PerlStdReturnStatement>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlPackageDeclaration>   (?<PerlStdPackageDeclaration>
        package
            (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
        (?: (?>(?&PerlNWS)) (?&PerlVersionNumber) )?+
            (?>(?&PerlOWSOrEND)) (?> ; | (?&PerlBlock) | (?= \} | \z ))
    )) # End of rule

        (?<PerlExpression>   (?<PerlStdExpression>
                                (?>(?&PerlLowPrecedenceNotExpression))
            (?: (?>(?&PerlOWS)) (?>(?&PerlLowPrecedenceInfixOperator))
                (?>(?&PerlOWS))    (?&PerlLowPrecedenceNotExpression)  )*+
    )) # End of rule

        (?<PerlLowPrecedenceNotExpression>   (?<PerlStdLowPrecedenceNotExpression>
            (?: not \b (?&PerlOWS) )*+  (?&PerlCommaList)
    )) # End of rule

        (?<PerlCommaList>   (?<PerlStdCommaList>
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            (?:
                (?: (?>(?&PerlComma))          (?&PerlOWS)   )++
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            )*+
                (?: (?>(?&PerlComma))          (?&PerlOWSOrEND)   )*+
    )) # End of rule

        (?<PerlAssignment>   (?<PerlStdAssignment>
                                (?>(?&PerlConditionalExpression))
            (?:
                (?>(?&PerlOWS)) (?>(?&PerlAssignmentOperator))
                (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )*+
    )) # End of rule

        (?<PerlScalarExpression>   (?<PerlStdScalarExpression>
        (?<PerlConditionalExpression>   (?<PerlStdConditionalExpression>
            (?>(?&PerlBinaryExpression))
            (?:
                (?>(?&PerlOWS)) \? (?>(?&PerlOWS)) (?>(?&PerlAssignment))
                (?>(?&PerlOWS))  : (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )?+
    )) # End of rule
    )) # End of rule

        (?<PerlBinaryExpression>   (?<PerlStdBinaryExpression>
                                (?>(?&PerlPrefixPostfixTerm))
            (?: (?>(?&PerlOWS)) (?>(?&PerlInfixBinaryOperator))
                (?>(?&PerlOWS))    (?&PerlPrefixPostfixTerm) )*+
    )) # End of rule

        (?<PerlPrefixPostfixTerm>   (?<PerlStdPrefixPostfixTerm>
            (?: (?>(?&PerlPrefixUnaryOperator))  (?&PerlOWS) )*+
            (?>(?&PerlTerm))
            (?: (?>(?&PerlOWS)) (?&PerlPostfixUnaryOperator) )?+
    )) # End of rule

        (?<PerlLvalue>   (?<PerlStdLvalue>
            (?>
                \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier)
            |
                \(                                                                     (?>(?&PerlOWS))
                    (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )      (?>(?&PerlOWS))
                    (?:
                        (?>(?&PerlComma))                                              (?>(?&PerlOWS))
                        (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )  (?>(?&PerlOWS))
                    )*+
                    (?: (?>(?&PerlComma)) (?&PerlOWS) )?+
                \)
            )
    )) # End of rule

        (?<PerlTerm>   (?<PerlStdTerm>
            (?>
                (?&PerlReturnExpression)

            # The remaining alternatives can all take postfix dereferencers...
            | (?:
                    (?= \$ )  (?&PerlScalarAccess)
              |
                    (?= \@ )  (?&PerlArrayAccess)
              |
                    (?=  % )  (?&PerlHashAccess)
              |
                    (?&PerlAnonymousSubroutine)
              |
                    (?>(?&PerlNullaryBuiltinFunction))  (?! (?>(?&PerlOWS)) \( )
              |
                    (?&PerlDoBlock) | (?&PerlEvalBlock)
              |
                    (?&PerlCall)
              |
                    (?&PerlVariableDeclaration)
              |
                    (?&PerlTypeglob)
              |
                    (?>(?&PerlParenthesesList))

                    # Can optionally do a [...] lookup straight after the parens,
                    # followd by any number of other look-ups
                    (?:
                        (?>(?&PerlOWS)) (?&PerlArrayIndexer)
                        (?:
                            (?>(?&PerlOWS))
                            (?>
                                (?&PerlArrayIndexer)
                            |   (?&PerlHashIndexer)
                            |   (?&PerlParenthesesList)
                            )
                        )*+
                    )?+
              |
                    (?&PerlAnonymousArray)
              |
                    (?&PerlAnonymousHash)
              |
                    (?&PerlDiamondOperator)
              |
                    (?&PerlContextualMatch)
              |
                    (?&PerlQuotelikeS)
              |
                    (?&PerlQuotelikeTR)
              |
                    (?&PerlQuotelikeQX)
              |
                    (?&PerlLiteral)
              )

              (?: (?&PerlTermPostfixDereference) )?+
            )
    )) # End of rule

        (?<PerlTermPostfixDereference>   (?<PerlStdTermPostfixDereference>
            # Must have at least one arrowed dereference...
            (?:
                (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?>  (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    (?:
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    )*+

                |   # A method call...
                    (?> (?&PerlQualifiedIdentifier) | (?! \$\#\* ) (?&PerlVariableScalar) )
                    (?: (?>(?&PerlOWS)) (?&PerlParenthesesList) )?+

                |   # An array or hash slice or k/v slice
                    # (provided it's not subsequently dereferenced)
                    [\@%] (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS))  [\@%]?+  [\[\{] )

                |   # An array max-index lookup...
                    \$\#\*

                |   # A scalar-, glob-, or subroutine dereference...
                    [\$*&] \*

                |   # An array dereference (provided it's not subsequently dereferenced)...
                    \@\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\[\@] )

                |   # A hash dereference (provided it's not subsequently dereferenced)...
                    \%\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\{%] )

                |   # A glob lookup...
                    \* (?&PerlHashIndexer)
                )
            )++
    )) # End of rule

        (?<PerlControlBlock>   (?<PerlStdControlBlock>
            (?> # Conditionals...
                (?> if | unless ) \b                 (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))          (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    elsif \b                         (?>(?&PerlOWS))
                    (?>(?&PerlParenthesesList))      (?>(?&PerlOWS))
                    (?&PerlBlock)
                )*+

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    else \b                          (?>(?&PerlOWS))
                    (?&PerlBlock)
                )?+

            |   # Loops...
                (?>
                    for(?:each)?+ \b
                    (?>(?&PerlOWS))
                    (?:
                        (?> # Explicitly aliased iterator variable...
                            (?> \\ (?>(?&PerlOWS))  (?> my | our | state )
                            |                       (?> my | our | state )  (?>(?&PerlOWS)) \\
                            )
                            (?>(?&PerlOWS))
                            (?> (?&PerlVariableScalar)
                            |   (?&PerlVariableArray)
                            |   (?&PerlVariableHash)
                            )
                        |
                            # List of scalar iterator variables...
                            my                                   (?>(?&PerlOWS))
                            \(                                   (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                (?: ,                            (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                )*+
                                (?: ,                            (?>(?&PerlOWS)) )?+
                            \)

                        |
                            # Implicitly aliased iterator variable...
                            (?> (?: my | our | state ) (?>(?&PerlOWS)) )?+
                            (?&PerlVariableScalar)
                        )?+
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlQuotelikeQW) )
                    |
                        (?&PPR_X_three_part_list)
                    )
                |
                    (?> while | until) \b (?>(?&PerlOWS))
                    (?&PerlParenthesesList)
                )

                (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                    (?>(?&PerlOWS))   continue
                    (?>(?&PerlOWS))   (?&PerlBlock)
                )?+

            | # Phasers...
                (?> BEGIN | END | CHECK | INIT | UNITCHECK ) \b   (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Try/catch/finallys...
                (?>(?&PerlTryCatchFinallyBlock))

            | # Defers...
                defer                                     (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Switches...
                (?> given | when ) \b                     (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))               (?>(?&PerlOWS))
                (?&PerlBlock)
            |
                default                                   (?>(?&PerlOWS))
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlFormat>   (?<PerlStdFormat>
            format
            (?: (?>(?&PerlNWS))  (?&PerlQualifiedIdentifier)  )?+
                (?>(?&PerlOWS))  = [^\n]*+
                (?&PPR_X_newline_and_heredoc)
            (?:
                (?! \. \n )
                [^\n\$\@]*+
                (?:
                    (?>
                        (?= \$ (?! \s ) )  (?&PerlScalarAccessNoSpace)
                    |
                        (?= \@ (?! \s ) )  (?&PerlArrayAccessNoSpace)
                    )
                    [^\n\$\@]*+
                )*+
                (?&PPR_X_newline_and_heredoc)
            )*+
            \. (?&PerlEndOfLine)
    )) # End of rule

        (?<PerlStatementModifier>   (?<PerlStdStatementModifier>
            (?> if | for(?:each)?+ | while | unless | until | when )
            \b
            (?>(?&PerlOWS))
            (?&PerlExpression)
    )) # End of rule

        (?<PerlBlock>   (?<PerlStdBlock>
            \{  (?>(?&PerlStatementSequence))  \}
    )) # End of rule

        (?<PerlCall>   (?<PerlStdCall>
            (?>
                [&]                                    (?>(?&PerlOWS))
                (?> (?&PerlBlock)
                |   (?&PerlVariableScalar)
                |   (?&PerlQualifiedIdentifier)
                )                                      (?>(?&PerlOWS))
                (?:
                    \(                                 (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))        (?&PerlOWS)   )?+
                    \)
                )?+
            |
                - (?>(?&PPR_X_filetest_name))            (?>(?&PerlOWS))
                (?&PerlPrefixPostfixTerm)?+
            |
                (?>(?&PerlBuiltinFunction))            (?>(?&PerlOWS))
                (?>
                    \(                                 (?>(?&PerlOWS))
                        (?>
                            (?= (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlExpression)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlExpression)
                        |
                            (?&PerlExpression)?+
                        )                              (?>(?&PerlOWS))
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            |
                (?>(?&PPR_X_non_reserved_identifier)) (?>(?&PerlOWS))
                (?>
                    \(                              (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))     (?&PerlOWS)  )?+
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))           (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))        (?&PerlNWS)
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            )
    )) # End of rule

        (?<PerlVariableDeclaration>   (?<PerlStdVariableDeclaration>
            (?> my | our | state ) \b           (?>(?&PerlOWS))
            (?: (?&PerlQualifiedIdentifier)        (?&PerlOWS)  )?+
            (?>(?&PerlLvalue))                  (?>(?&PerlOWS))
            (?&PerlAttributes)?+
    )) # End of rule

        (?<PerlDoBlock>   (?<PerlStdDoBlock>
            do (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlEvalBlock>   (?<PerlStdEvalBlock>
            eval (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlTryCatchFinallyBlock>   (?<PerlStdTryCatchFinallyBlock>

                try \b                                (?>(?&PerlOWS))
                (?>(?&PerlBlock))
                                                      (?>(?&PerlOWS))
                catch \b                              (?>(?&PerlOWS))
                \(  (?>(?&PerlVariableScalar))  \)    (?>(?&PerlOWS))
                (?>(?&PerlBlock))

            (?:
                                                      (?>(?&PerlOWS))
                finally \b                            (?>(?&PerlOWS))
                (?>(?&PerlBlock))
            )?+
    )) # End of rule

        (?<PerlAttributes>   (?<PerlStdAttributes>
            :
            (?>(?&PerlOWS))
            (?>(?&PerlIdentifier))
            (?:
                (?= \( ) (?&PPR_X_quotelike_body)
            )?+

            (?:
                (?> (?>(?&PerlOWS)) : (?&PerlOWS) | (?&PerlNWS) )
                (?>(?&PerlIdentifier))
                (?:
                    (?= \( ) (?&PPR_X_quotelike_body)
                )?+
            )*+
    )) # End of rule

        (?<PerlList>   (?<PerlStdList>
            (?> (?&PerlParenthesesList) | (?&PerlCommaList) )
    )) # End of rule

        (?<PerlParenthesesList>   (?<PerlStdParenthesesList>
            \(  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \)
    )) # End of rule

        (?<PerlAnonymousArray>   (?<PerlStdAnonymousArray>
            \[  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \]
    )) # End of rule

        (?<PerlAnonymousHash>   (?<PerlStdAnonymousHash>
            \{  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+ \}
    )) # End of rule

        (?<PerlArrayIndexer>   (?<PerlStdArrayIndexer>
            \[                          (?>(?&PerlOWS))
                (?>(?&PerlExpression))  (?>(?&PerlOWS))
            \]
    )) # End of rule

        (?<PerlHashIndexer>   (?<PerlStdHashIndexer>
            \{  (?>(?&PerlOWS))
                (?: -?+ (?&PerlIdentifier) | (?&PerlExpression) )  # (Note: MUST allow backtracking here)
                (?>(?&PerlOWS))
            \}
    )) # End of rule

        (?<PerlDiamondOperator>   (?<PerlStdDiamondOperator>
            <<>>    # Perl 5.22 "double diamond"
        |
            < (?! < )
                (?>(?&PPR_X_balanced_angles))
            >
            (?=
                (?>(?&PerlOWSOrEND))
                (?> \z | [,;\}\])?] | => | : (?! :)        # (
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule

        (?<PerlComma>   (?<PerlStdComma>
            (?> , | => )
    )) # End of rule

        (?<PerlPrefixUnaryOperator>   (?<PerlStdPrefixUnaryOperator>
            (?> \+\+ | -- | [!\\+~] | - (?! (?&PPR_X_filetest_name) \b ) )
    )) # End of rule

        (?<PerlPostfixUnaryOperator>   (?<PerlStdPostfixUnaryOperator>
            (?> \+\+  |  -- )
    )) # End of rule

        (?<PerlInfixBinaryOperator>   (?<PerlStdInfixBinaryOperator>
            (?>  [=!][~=]
            |    cmp
            |    <= >?+
            |    >=
            |    [lg][te]
            |    eq
            |    ne
            |    [+]             (?! [+=] )
            |     -              (?! [-=] )
            |    [.]{2,3}+
            |    [.%x]           (?! [=]  )
            |    [&|^][.]        (?! [=]  )
            |    [<>*&|/]{1,2}+  (?! [=]  )
            |    \^              (?! [=]  )
            |    ~~
            |    isa
            )
    )) # End of rule

        (?<PerlAssignmentOperator>   (?<PerlStdAssignmentOperator>
            (?:  [<>*&|/]{2}
            |  [-+.*/%x]
            |  [&|^][.]?+
            )?+
            =
            (?! > )
    )) # End of rule

        (?<PerlLowPrecedenceInfixOperator>   (?<PerlStdLowPrecedenceInfixOperator>
            (?> or | and | xor )
    )) # End of rule

        (?<PerlAnonymousSubroutine>   (?<PerlStdAnonymousSubroutine>
            sub \b
            (?>(?&PerlOWS))
            (?:
                # Perl pre 5.028
                (?:
                    (?>
                        (?&PerlSignature)    # Parameter list
                    |
                        \( [^)]*+ \)         # Prototype (
                    )
                    (?&PerlOWS)
                )?+
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            |
                # Perl post 5.028
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
                (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
            )
            (?&PerlBlock)
    )) # End of rule

        (?<PerlVariable>   (?<PerlStdVariable>
            (?= [\$\@%] )
            (?>
                (?&PerlScalarAccess)
            |   (?&PerlHashAccess)
            |   (?&PerlArrayAccess)
            )
            (?> (?&PerlTermPostfixDereference) )?+
    )) # End of rule

        (?<PerlTypeglob>   (?<PerlStdTypeglob>
            \*
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier))  (?: :: )?+
            |
                (?&PerlVariableScalar)
            |
                [][!"#\$%&'()*+,./:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccess>   (?<PerlStdArrayAccess>
            (?>(?&PerlVariableArray))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccessNoSpace>   (?<PerlStdArrayAccessNoSpace>
            (?>(?&PerlVariableArrayNoSpace))

            # Optional arrowless access(es) to begin
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any number of optional arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlArrayAccessNoSpaceNoArrow>   (?<PerlStdArrayAccessNoSpaceNoArrow>
            (?>(?&PerlVariableArray))
            (?:
                (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
            )*+
    )) # End of rule

        (?<PerlHashAccess>   (?<PerlStdHashAccess>
            (?>(?&PerlVariableHash))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlScalarAccess>   (?<PerlStdScalarAccess>
            (?>(?&PerlVariableScalar))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlScalarAccessNoSpace>   (?<PerlStdScalarAccessNoSpace>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) to begin...
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any nuber of arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlScalarAccessNoSpaceNoArrow>   (?<PerlStdScalarAccessNoSpaceNoArrow>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) (but parens can't be first)...
            (?:
                (?! \( )
                (?:
                    (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlVariableScalar>   (?<PerlStdVariableScalar>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
                (?&PerlOWS)
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ [!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-] \}
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableScalarNoSpace>   (?<PerlStdVariableScalarNoSpace>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableArray>   (?<PerlStdVariableArray>
            \@     (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableArrayNoSpace>   (?<PerlStdVariableArrayNoSpace>
            \@
            (?: \$ )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableHash>   (?<PerlStdVariableHash>
            %      (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)?+
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlLabel>   (?<PerlStdLabel>
            (?! (?> [msy] | q[wrxq]?+ | tr ) \b )
            (?>(?&PerlIdentifier))
            : (?! : )
    )) # End of rule

        (?<PerlLiteral>   (?<PerlStdLiteral>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlNumber)
            |   (?&PerlBareword)
            )
    )) # End of rule

        (?<PerlString>   (?<PerlStdString>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                (?: q \b | qq (?= (?>(?&PerlOWS)) ' ) )
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            |
                qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            |
                (?&PerlHeredoc)
            |
                (?&PerlVString)
            )
    )) # End of rule

        (?<PerlQuotelike>   (?<PerlStdQuotelike>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlQuotelikeQX)
            |   (?&PerlContextualMatch)
            |   (?&PerlQuotelikeS)
            |   (?&PerlQuotelikeTR)
            )
    )) # End of rule

        (?<PerlHeredoc>   (?<PerlStdHeredoc>
            # Match the introducer...
            <<
            (?<_heredoc_indented> [~]?+ )

            # Match the terminator specification...
            (?>
                \\?+   (?<_heredoc_terminator>  (?&PerlIdentifier)              )
            |
                (?>(?&PerlOWS))
                (?>
                    "  (?<_heredoc_terminator>  [^"\\]*+  (?: \\. [^"\\]*+ )*+  )  "  #"
                |
                    (?<PPR_X_HD_nointerp> ' )
                    (?<_heredoc_terminator>  [^'\\]*+  (?: \\. [^'\\]*+ )*+  )  '  #'
                |
                    `  (?<_heredoc_terminator>  [^`\\]*+  (?: \\. [^`\\]*+ )*+  )  `  #`
                )
            |
                    (?<_heredoc_terminator>                                  )
            )

            # Do we need to reset the heredoc cache???
            (?====================================================================================================================================================================================================================================================================)

            # Do we need to cache content lookahead for this heredoc???
            (?(?==============================================================================================================================================================================)

                # Lookahead to detect and remember trailing contents of heredoc
                (?=
                    [^\n]*+ \n                                   # Go to the end of the current line
                    (?==========)                                # Remember the start of the contents
                    (?==========================================)   # Skip earlier heredoc contents
                    (?>                                          # The heredoc contents consist of...
                        (?:
                            (?!
                                (?(?=========================) \h*+ )   # An indent (if it was a <<~)
                                \g{_heredoc_terminator}                 # The terminator
                                (?: \n | \z )                           # At an end-of-line
                            )
                            (?(<PPR_X_HD_nointerp>)
                                [^\n]*+ \n
                            |
                                [^\n\$\@]*+
                                (?:
                                    (?>
                                        (?===========================================)
                                        (?= \$ )  (?&PerlScalarAccess)
                                        (?===============================)
                                    |
                                        (?===========================================)
                                        (?= \@ )  (?&PerlArrayAccess)
                                        (?===============================)
                                    )
                                    [^\n\$\@]*+
                                )*+
                                \n (?==========================================)
                            )
                        )*+

                        (?(?=========================) \h*+ )            # An indent (if it was a <<~)
                        \g{_heredoc_terminator}                          # The specified terminator
                        (?: \n | \z )                                    # Followed by EOL
                    )

                    # Then memoize the skip for when it's subsequently needed by PerlOWS or PerlNWS...
                    (?===============================================================================================================================================================================================================================================================================================================================================================================)
                )
            )

    )) # End of rule

        (?<PerlQuotelikeQ>   (?<PerlStdQuotelikeQ>
            (?>
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                \b q \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQQ>   (?<PerlStdQuotelikeQQ>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                \b qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            )
    )) # End of rule

        (?<PerlQuotelikeQW>   (?<PerlStdQuotelikeQW>
            (?>
                qw \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQX>   (?<PerlStdQuotelikeQX>
            (?>
                `  [^`]*+  (?: \\. [^`]*+ )*+  `
            |
                qx
                    (?>
                        (?= (?>(?&PerlOWS)) ' )
                        (?&PPR_X_quotelike_body)
                    |
                        \b (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                        (?&PPR_X_quotelike_body_interpolated)
                    )
            )
    )) # End of rule

        (?<PerlQuotelikeS>   (?<PerlStdQuotelikeS>
        (?<PerlSubstitution>   (?<PerlStdSubstitution>
            s \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{]                 # )
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_regex_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Single-quoted syntax...
                (?= (?>(?&PerlOWS)) ' )
                (?>(?&PPR_X_regex_body_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Delimited syntax...
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            )
            [msixpodualgcern]*+
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeTR>   (?<PerlStdQuotelikeTR>
        (?<PerlTransliteration>   (?<PerlStdTransliteration>
            (?> tr | y ) \b
            (?! (?>(?&PerlOWS)) => )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{\«]                 # )]
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_quotelike_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Delimited syntax...
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            )
            [cdsr]*+
    )) # End of rule
    )) # End of rule

        (?<PerlContextualQuotelikeM>   (?<PerlStdContextualQuotelikeM>
        (?<PerlContextualMatch>   (?<PerlStdContextualMatch>
            (?<PerlQuotelikeM>
            (?<PerlMatch>
                (?>
                    \/\/
                |
                    (?>
                        m (?= [#] )
                    |
                        m \b
                        (?! (?>(?&PerlOWS)) => )
                    |
                        (?= \/ [^/] )
                    )
                    (?&PPR_X_regex_body_interpolated)
                )
                [msixpodualgcn]*+
            ) # End of rule (?<PerlMatch>)
            ) # End of rule (?<PerlQuotelikeM>)
            (?=
                (?>(?&PerlOWS))
                (?> \z | [,;\}\])?] | => | : (?! :)
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeQR>   (?<PerlStdQuotelikeQR>
            qr \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>(?&PPR_X_regex_body_interpolated))
            [msixpodualn]*+
    )) # End of rule

        (?<PerlRegex>   (?<PerlStdRegex>
            (?>
                (?&PerlMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule

        (?<PerlContextualRegex>   (?<PerlStdContextualRegex>
            (?>
                (?&PerlContextualMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule


        (?<PerlBuiltinFunction>   (?<PerlStdBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?=[^\W\d]) # Skip if possible
            (?>
                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(?>at|udy)|leep|rand|qrt|ay|in)
                | 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)
                | r(?>e(?>ad(?>lin[ek]|pipe|dir)?|(?>quir|vers|nam)e|winddir|turn|set|cv|do|f)|index|mdir|and)
                | c(?>h(?>o(?>m?p|wn)|r(?>oot)?|dir|mod)|o(?>n(?>tinue|nect)|s)|lose(?>dir)?|aller|rypt)
                | e(?>nd(?>(?>hos|ne)t|p(?>roto|w)|serv|gr)ent|x(?>i(?>sts|t)|ec|p)|ach|val(?>bytes)?+|of)
                | l(?>o(?>c(?>al(?>time)?|k)|g)|i(?>sten|nk)|(?>sta|as)t|c(?>first)?|ength)
                | u(?>n(?>(?>lin|pac)k|shift|def|tie)|c(?>first)?|mask|time)
                | p(?>r(?>ototype|intf?)|ack(?>age)?|o[ps]|ipe|ush)
                | d(?>bm(?>close|open)|e(?>fined|lete)|ump|ie|o)
                | f(?>or(?>m(?>line|at)|k)|ileno|cntl|c|lock)
                | t(?>i(?>mes?|ed?)|ell(?>dir)?|runcate)
                | w(?>a(?>it(?>pid)?|ntarray|rn)|rite)
                | m(?>sg(?>ctl|get|rcv|snd)|kdir|ap)
                | b(?>in(?>mode|d)|less|reak)
                | i(?>n(?>dex|t)|mport|octl)
                | a(?>ccept|larm|tan2|bs)
                | o(?>pen(?>dir)?|ct|rd)
                | v(?>alues|ec)
                | k(?>eys|ill)
                | quotemeta
                | join
                | next
                | hex
                | _
            )
            \b
    )) # End of rule

        (?<PerlNullaryBuiltinFunction>   (?<PerlStdNullaryBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?= [^\W\d] )  # Skip if possible
            (?>
                get(?:(?:(?:hos|ne)t|serv|gr)ent|p(?:(?:roto|w)ent|pid)|login)
                | end(?:(?:hos|ne)t|p(?:roto|w)|serv|gr)ent
                | wa(?:ntarray|it)
                | times?
                | fork
                | _
            )
            \b
    )) # End of rule

        (?<PerlVersionNumber>   (?<PerlStdVersionNumber>
            (?>
                (?&PerlVString)
            |
                (?>(?&PPR_X_digit_seq))
                (?: \. (?&PPR_X_digit_seq)?+ )*+
            )
    )) # End of rule

        (?<PerlVString>   (?<PerlStdVString>
            v  (?>(?&PPR_X_digit_seq))  (?: \. (?&PPR_X_digit_seq) )*+
    )) # End of rule

        (?<PerlNumber>   (?<PerlStdNumber>
            [+-]?+
            (?>
                0  (?>  x   (?&PPR_X_x_digit_seq)
                |       b   (?&PPR_X_b_digit_seq)
                |       o?  (?&PPR_X_o_digit_seq)
                )
            |
                (?>
                        (?>(?&PPR_X_digit_seq))
                    (?: \. (?&PPR_X_digit_seq)?+ )?+
                |
                        \. (?&PPR_X_digit_seq)
                )
                (?: [eE] [+-]?+ (?&PPR_X_digit_seq) )?+
            )
    )) # End of rule

        (?<PerlOldQualifiedIdentifier>   (?<PerlStdOldQualifiedIdentifier>
            (?> (?> :: | ' ) \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlQualifiedIdentifier>   (?<PerlStdQualifiedIdentifier>
            (?>     ::       \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlIdentifier>   (?<PerlStdIdentifier>
                                    [^\W\d]\w*+
    )) # End of rule

        (?<PerlBareword>   (?<PerlStdBareword>
            (?! (?> (?= \w )
                    (?> for(?:each)?+ | while | if      | unless | until | use | no
                    |   given         | when  | sub     | return | my    | our | state
                    |   try           | catch | finally | defer
                    )
                |   (?&PPR_X_named_op)
                |   __ (?> END | DATA ) __ \b
                ) \b
                (?! (?>(?&PerlOWS)) => )
            )
            (?! (?> q[qwrx]?+ | [mys] | tr ) \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            )
            (?: :: )?+
            [^\W\d]\w*+
            (?: (?: :: | ' )  [^\W\d]\w*+  )*+
            (?: :: )?+
            (?! \( )    # )
        |
            :: (?! \w | \{ )
    )) # End of rule

        (?<PerlKeyword>   (?<PerlStdKeyword>
            (?!)    # None, by default, but can be overridden in a composing regex
    )) # End of rule

        (?<PerlPodSequence>   (?<PerlStdPodSequence>
            (?>(?&PerlOWS))  (?: (?>(?&PerlPod))  (?&PerlOWS) )*+
    )) # End of rule

        (?<PerlPod>   (?<PerlStdPod>
            ^ = [^\W\d]\w*+             # A line starting with =<identifier>
            .*?                         # Up to the first...
            (?>
                ^ = cut \b [^\n]*+ $    # ...line starting with =cut
            |                           # or
                \z                      # ...EOF
            )
    )) # End of rule


        ##### Whitespace matching (part of API) #################################

        (?<PerlOWSOrEND>   (?<PerlStdOWSOrEND>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            |
                __ (?> END | DATA ) __ \b .*+ \z
            )*+
    )) # End of rule

        (?<PerlOWS>   (?<PerlStdOWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )*+
    )) # End of rule

        (?<PerlNWS>   (?<PerlStdNWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )++
    )) # End of rule

        (?<PerlEndOfLine>   (?<PerlStdEndOfLine>
            \n
    )) # End of rule


        ###### Internal components (not part of API) ##########################

        (?<PPR_X_named_op>
            (?> cmp
            |   [lg][te]
            |   eq
            |   ne
            |   and
            |   or
            |   xor
            )
        ) # End of rule (?<PPR_X_named_op>)

        (?<PPR_X_non_reserved_identifier>
            (?! (?>
                   for(?:each)?+ | while   | if    | unless | until | given | when | default
                |  sub | format  | use     | no    | my     | our   | state
                |  try | catch   | finally | defer
                |  (?&PPR_X_named_op)
                |  [msy] | q[wrxq]?+ | tr
                |   __ (?> END | DATA ) __
                )
                \b
            )
            (?>(?&PerlQualifiedIdentifier))
            (?! :: )
        ) # End of rule (?<PPR_X_non_reserved_identifier>)

        (?<PPR_X_three_part_list>
            \(  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            \)
        ) # End of rule (?<PPR_X_three_part_list>)

        (?<PPR_X_indirect_obj>
            (?&PerlBareword)
        |
            (?>(?&PerlVariableScalar))
            (?! (?>(?&PerlOWS)) (?> [<\[\{] | -> ) )
        ) # End of rule (?<PPR_X_indirect_obj>)

        (?<PPR_X_quotelike_body>
            (?>(?&PPR_X_quotelike_body_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body>)

        (?<PPR_X_balanced_parens>
            [^)(\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^)(\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens>)

        (?<PPR_X_balanced_curlies>
            [^\}\{\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^\}\{\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies>)

        (?<PPR_X_balanced_squares>
            [^][\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?&PPR_X_balanced_squares)  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^][\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares>)

        (?<PPR_X_balanced_angles>
            [^><\\\n]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^><\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles>)

        (?<PPR_X_balanced_unicode_delims>
            (?============================)* <-- HERE +
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                (?============================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims>)

        (?<PPR_X_regex_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))            (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))            (?= \] )
                |
                    \(  (?>
                            \?{1,2}+ (?= \{ )
                            (?>(?&PerlBlock))
                        |
                            (?! \?{1,2}+ \{ )
                            (?>(?&PPR_X_balanced_parens))
                        )                                       (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))              (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_regex_body_unclosed>)

        (?<PPR_X_quotelike_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))        (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))        (?= \] )
                |
                    \(  (?>(?&PPR_X_balanced_parens))         (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))          (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_quotelike_body_unclosed>)

        (?<PPR_X_quotelike_body_interpolated>
            (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated>)

        (?<PPR_X_regex_body_interpolated>
            (?>(?&PPR_X_regex_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_regex_body_interpolated>)

        (?<PPR_X_balanced_parens_regex_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_regex_interpolated>)

        (?<PPR_X_balanced_curlies_regex_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_regex_interpolated>)

        (?<PPR_X_balanced_squares_regex_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\](|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\](|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_regex_interpolated>)

        (?<PPR_X_balanced_angles_regex_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_regex_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_regex_interpolated>)


        (?<PPR_X_balanced_unicode_delims_regex_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=======================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?========================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlScalarAccessNoSpace)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_regex_interpolated>)


        (?<PPR_X_balanced_parens_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_interpolated>)

        (?<PPR_X_balanced_curlies_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_interpolated>)

        (?<PPR_X_balanced_squares_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\]] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\]] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_interpolated>)

        (?<PPR_X_balanced_unicode_delims_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! \s | (?======================) ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! \s | (?======================) ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_interpolated>)

        (?<PPR_X_balanced_angles_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_interpolated>)

        (?<PPR_X_regex_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#|()] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#|()] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_regex_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s|()-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s|()-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_regex_body_unclosed)
        ) # End of rule (?<PPR_X_regex_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_quotelike_body_unclosed)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_s_e_check>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body_interpolated)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check>)

        (?<PPR_X_quotelike_s_e_check_uninterpolated>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check_uninterpolated>)

        (?<PPR_X_filetest_name>   [ABCMORSTWXbcdefgkloprstuwxz]          )

        (?<PPR_X_digit_seq>               \d++ (?: _?+         \d++ )*+  )
        (?<PPR_X_x_digit_seq>     [\da-fA-F]++ (?: _?+ [\da-fA-F]++ )*+  )
        (?<PPR_X_o_digit_seq>          [0-7]++ (?: _?+      [0-7]++ )*+  )
        (?<PPR_X_b_digit_seq>          [0-1]++ (?: _?+      [0-1]++ )*+  )

        (?<PPR_X_newline_and_heredoc>
            \n (?===================================================================================================)
        ) # End of rule (?<PPR_X_newline_and_heredoc>)
    )
    # END OF GRAMMAR
)/ at (eval 33) line 2209.
t/plugin-packageversion.t ....... 
Dubious, test returned 255 (wstat 65280, 0xff00)
No subtests run 
(?============================)* matches null string many times in regex; marked by <-- HERE in m/(?(DEFINE)

(?<PerlUseStatement>(?<PerlWrapperUseStatement_001>(?&PerlBabbleInnerMatch)|(?&PerlStdUseStatement)))
(?<PerlBabbleInnerMatch>(?<PerlWrapperBabbleInnerMatch_001>((?&PerlStdBabbleInnerMatch))(?================================================================)))
(?<PerlStdBabbleInnerMatch>use\s+experimental\s+.*?;)

) (?^umsx:
    (?(DEFINE)

        (?<PerlEntireDocument>   (?<PerlStdEntireDocument>
            \A
            (?&PerlDocument)
            (?:
                \Z
            |
                (?(?===========================)
                    (?>(?&PerlOWSOrEND))  (?=======)  ([^\n]++)
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlDocument>   (?<PerlStdDocument>
            \x{FEFF}?+                      # Optional BOM marker
            (?&PerlStatementSequence)
            (?&PerlOWSOrEND)
    )) # End of rule

        (?<PerlStatementSequence>   (?<PerlStdStatementSequence>
            (?>(?&PerlPodSequence))
            (?:
                (?&PerlStatement)
                (?&PerlPodSequence)
            )*+
    )) # End of rule

        (?<PerlStatement>   (?<PerlStdStatement>
            (?>
                (?>(?&PerlPodSequence))
                (?: (?>(?&PerlLabel)) (?&PerlOWSOrEND) )?+
                (?>(?&PerlPodSequence))
                (?>
                    (?&PerlKeyword)
                |
                    (?&PerlSubroutineDeclaration)
                |
                    (?&PerlUseStatement)
                |
                    (?&PerlPackageDeclaration)
                |
                    (?&PerlControlBlock)
                |
                    (?&PerlFormat)
                |
                    (?>(?&PerlExpression))          (?>(?&PerlOWS))
                    (?&PerlStatementModifier)?+     (?>(?&PerlOWSOrEND))
                    (?> ; | (?= \} | \z ))
                |
                    (?&PerlBlock)
                |
                    ;
                )

            | # A yada-yada...
                \.\.\. (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just a label...
                (?>(?&PerlLabel)) (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just an empty statement...
                (?>(?&PerlOWS)) ;

            | # An error (report it, if it's the first)...
                (?(?===========================)
                    (?> (?&PerlOWS) )
                    (?! (?: \} | \z ) )
                    (?=========)
                    ( (?&PerlExpression) (?&PerlOWS) [^\n]++ | [^;\}]++ )
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlSubroutineDeclaration>   (?<PerlStdSubroutineDeclaration>
        (?>
            (?: (?> my | our | state ) \b      (?>(?&PerlOWS)) )?+
            sub \b                             (?>(?&PerlOWS))
            (?>(?&PerlOldQualifiedIdentifier))    (?&PerlOWS)
        |
            AUTOLOAD                              (?&PerlOWS)
        |
            DESTROY                               (?&PerlOWS)
        )
        (?:
            # Perl pre 5.028
            (?:
                (?>
                    (?&PerlSignature)    # Parameter list
                |
                    \( [^)]*+ \)         # Prototype (
                )
                (?&PerlOWS)
            )?+
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
        |
            # Perl post 5.028
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
        )
        (?> ; | (?&PerlBlock) )
    )) # End of rule

        (?<PerlSignature>   (?<PerlStdSignature>
            \(
                (?>(?&PerlOWS))
                (?&PerlParameterDeclaration)*+
            \)
    )) # End of rule

        (?<PerlParameterDeclaration>   (?<PerlStdParameterDeclaration>
            (?:
                    \$  (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)?+ (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableScalar) (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)   (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableArray) (?>(?&PerlOWS))
            |
                (?&PerlVariableHash)  (?>(?&PerlOWS))
            )
            (?: , (?>(?&PerlOWS))  |  (?= \) ) )     # (
    )) # End of rule


        (?<PerlUseStatement>   (?<PerlStdUseStatement>
        (?: use | no ) (?>(?&PerlNWS))
        (?>
            (?&PerlVersionNumber)
        |
            (?>(?&PerlQualifiedIdentifier))
            (?: (?>(?&PerlNWS)) (?&PerlVersionNumber)
                (?! (?>(?&PerlOWS)) (?> (?&PerlInfixBinaryOperator) | (?&PerlComma) | \? ) )
            )?+
            (?: (?>(?&PerlNWS)) (?&PerlPodSequence) )?+
            (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        )
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlReturnExpression>   (?<PerlStdReturnExpression>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
    )) # End of rule

        (?<PerlReturnStatement>   (?<PerlStdReturnStatement>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlPackageDeclaration>   (?<PerlStdPackageDeclaration>
        package
            (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
        (?: (?>(?&PerlNWS)) (?&PerlVersionNumber) )?+
            (?>(?&PerlOWSOrEND)) (?> ; | (?&PerlBlock) | (?= \} | \z ))
    )) # End of rule

        (?<PerlExpression>   (?<PerlStdExpression>
                                (?>(?&PerlLowPrecedenceNotExpression))
            (?: (?>(?&PerlOWS)) (?>(?&PerlLowPrecedenceInfixOperator))
                (?>(?&PerlOWS))    (?&PerlLowPrecedenceNotExpression)  )*+
    )) # End of rule

        (?<PerlLowPrecedenceNotExpression>   (?<PerlStdLowPrecedenceNotExpression>
            (?: not \b (?&PerlOWS) )*+  (?&PerlCommaList)
    )) # End of rule

        (?<PerlCommaList>   (?<PerlStdCommaList>
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            (?:
                (?: (?>(?&PerlComma))          (?&PerlOWS)   )++
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            )*+
                (?: (?>(?&PerlComma))          (?&PerlOWSOrEND)   )*+
    )) # End of rule

        (?<PerlAssignment>   (?<PerlStdAssignment>
                                (?>(?&PerlConditionalExpression))
            (?:
                (?>(?&PerlOWS)) (?>(?&PerlAssignmentOperator))
                (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )*+
    )) # End of rule

        (?<PerlScalarExpression>   (?<PerlStdScalarExpression>
        (?<PerlConditionalExpression>   (?<PerlStdConditionalExpression>
            (?>(?&PerlBinaryExpression))
            (?:
                (?>(?&PerlOWS)) \? (?>(?&PerlOWS)) (?>(?&PerlAssignment))
                (?>(?&PerlOWS))  : (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )?+
    )) # End of rule
    )) # End of rule

        (?<PerlBinaryExpression>   (?<PerlStdBinaryExpression>
                                (?>(?&PerlPrefixPostfixTerm))
            (?: (?>(?&PerlOWS)) (?>(?&PerlInfixBinaryOperator))
                (?>(?&PerlOWS))    (?&PerlPrefixPostfixTerm) )*+
    )) # End of rule

        (?<PerlPrefixPostfixTerm>   (?<PerlStdPrefixPostfixTerm>
            (?: (?>(?&PerlPrefixUnaryOperator))  (?&PerlOWS) )*+
            (?>(?&PerlTerm))
            (?: (?>(?&PerlOWS)) (?&PerlPostfixUnaryOperator) )?+
    )) # End of rule

        (?<PerlLvalue>   (?<PerlStdLvalue>
            (?>
                \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier)
            |
                \(                                                                     (?>(?&PerlOWS))
                    (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )      (?>(?&PerlOWS))
                    (?:
                        (?>(?&PerlComma))                                              (?>(?&PerlOWS))
                        (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )  (?>(?&PerlOWS))
                    )*+
                    (?: (?>(?&PerlComma)) (?&PerlOWS) )?+
                \)
            )
    )) # End of rule

        (?<PerlTerm>   (?<PerlStdTerm>
            (?>
                (?&PerlReturnExpression)

            # The remaining alternatives can all take postfix dereferencers...
            | (?:
                    (?= \$ )  (?&PerlScalarAccess)
              |
                    (?= \@ )  (?&PerlArrayAccess)
              |
                    (?=  % )  (?&PerlHashAccess)
              |
                    (?&PerlAnonymousSubroutine)
              |
                    (?>(?&PerlNullaryBuiltinFunction))  (?! (?>(?&PerlOWS)) \( )
              |
                    (?&PerlDoBlock) | (?&PerlEvalBlock)
              |
                    (?&PerlCall)
              |
                    (?&PerlVariableDeclaration)
              |
                    (?&PerlTypeglob)
              |
                    (?>(?&PerlParenthesesList))

                    # Can optionally do a [...] lookup straight after the parens,
                    # followd by any number of other look-ups
                    (?:
                        (?>(?&PerlOWS)) (?&PerlArrayIndexer)
                        (?:
                            (?>(?&PerlOWS))
                            (?>
                                (?&PerlArrayIndexer)
                            |   (?&PerlHashIndexer)
                            |   (?&PerlParenthesesList)
                            )
                        )*+
                    )?+
              |
                    (?&PerlAnonymousArray)
              |
                    (?&PerlAnonymousHash)
              |
                    (?&PerlDiamondOperator)
              |
                    (?&PerlContextualMatch)
              |
                    (?&PerlQuotelikeS)
              |
                    (?&PerlQuotelikeTR)
              |
                    (?&PerlQuotelikeQX)
              |
                    (?&PerlLiteral)
              )

              (?: (?&PerlTermPostfixDereference) )?+
            )
    )) # End of rule

        (?<PerlTermPostfixDereference>   (?<PerlStdTermPostfixDereference>
            # Must have at least one arrowed dereference...
            (?:
                (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?>  (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    (?:
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    )*+

                |   # A method call...
                    (?> (?&PerlQualifiedIdentifier) | (?! \$\#\* ) (?&PerlVariableScalar) )
                    (?: (?>(?&PerlOWS)) (?&PerlParenthesesList) )?+

                |   # An array or hash slice or k/v slice
                    # (provided it's not subsequently dereferenced)
                    [\@%] (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS))  [\@%]?+  [\[\{] )

                |   # An array max-index lookup...
                    \$\#\*

                |   # A scalar-, glob-, or subroutine dereference...
                    [\$*&] \*

                |   # An array dereference (provided it's not subsequently dereferenced)...
                    \@\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\[\@] )

                |   # A hash dereference (provided it's not subsequently dereferenced)...
                    \%\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\{%] )

                |   # A glob lookup...
                    \* (?&PerlHashIndexer)
                )
            )++
    )) # End of rule

        (?<PerlControlBlock>   (?<PerlStdControlBlock>
            (?> # Conditionals...
                (?> if | unless ) \b                 (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))          (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    elsif \b                         (?>(?&PerlOWS))
                    (?>(?&PerlParenthesesList))      (?>(?&PerlOWS))
                    (?&PerlBlock)
                )*+

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    else \b                          (?>(?&PerlOWS))
                    (?&PerlBlock)
                )?+

            |   # Loops...
                (?>
                    for(?:each)?+ \b
                    (?>(?&PerlOWS))
                    (?:
                        (?> # Explicitly aliased iterator variable...
                            (?> \\ (?>(?&PerlOWS))  (?> my | our | state )
                            |                       (?> my | our | state )  (?>(?&PerlOWS)) \\
                            )
                            (?>(?&PerlOWS))
                            (?> (?&PerlVariableScalar)
                            |   (?&PerlVariableArray)
                            |   (?&PerlVariableHash)
                            )
                        |
                            # List of scalar iterator variables...
                            my                                   (?>(?&PerlOWS))
                            \(                                   (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                (?: ,                            (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                )*+
                                (?: ,                            (?>(?&PerlOWS)) )?+
                            \)

                        |
                            # Implicitly aliased iterator variable...
                            (?> (?: my | our | state ) (?>(?&PerlOWS)) )?+
                            (?&PerlVariableScalar)
                        )?+
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlQuotelikeQW) )
                    |
                        (?&PPR_X_three_part_list)
                    )
                |
                    (?> while | until) \b (?>(?&PerlOWS))
                    (?&PerlParenthesesList)
                )

                (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                    (?>(?&PerlOWS))   continue
                    (?>(?&PerlOWS))   (?&PerlBlock)
                )?+

            | # Phasers...
                (?> BEGIN | END | CHECK | INIT | UNITCHECK ) \b   (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Try/catch/finallys...
                (?>(?&PerlTryCatchFinallyBlock))

            | # Defers...
                defer                                     (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Switches...
                (?> given | when ) \b                     (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))               (?>(?&PerlOWS))
                (?&PerlBlock)
            |
                default                                   (?>(?&PerlOWS))
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlFormat>   (?<PerlStdFormat>
            format
            (?: (?>(?&PerlNWS))  (?&PerlQualifiedIdentifier)  )?+
                (?>(?&PerlOWS))  = [^\n]*+
                (?&PPR_X_newline_and_heredoc)
            (?:
                (?! \. \n )
                [^\n\$\@]*+
                (?:
                    (?>
                        (?= \$ (?! \s ) )  (?&PerlScalarAccessNoSpace)
                    |
                        (?= \@ (?! \s ) )  (?&PerlArrayAccessNoSpace)
                    )
                    [^\n\$\@]*+
                )*+
                (?&PPR_X_newline_and_heredoc)
            )*+
            \. (?&PerlEndOfLine)
    )) # End of rule

        (?<PerlStatementModifier>   (?<PerlStdStatementModifier>
            (?> if | for(?:each)?+ | while | unless | until | when )
            \b
            (?>(?&PerlOWS))
            (?&PerlExpression)
    )) # End of rule

        (?<PerlBlock>   (?<PerlStdBlock>
            \{  (?>(?&PerlStatementSequence))  \}
    )) # End of rule

        (?<PerlCall>   (?<PerlStdCall>
            (?>
                [&]                                    (?>(?&PerlOWS))
                (?> (?&PerlBlock)
                |   (?&PerlVariableScalar)
                |   (?&PerlQualifiedIdentifier)
                )                                      (?>(?&PerlOWS))
                (?:
                    \(                                 (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))        (?&PerlOWS)   )?+
                    \)
                )?+
            |
                - (?>(?&PPR_X_filetest_name))            (?>(?&PerlOWS))
                (?&PerlPrefixPostfixTerm)?+
            |
                (?>(?&PerlBuiltinFunction))            (?>(?&PerlOWS))
                (?>
                    \(                                 (?>(?&PerlOWS))
                        (?>
                            (?= (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlExpression)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlExpression)
                        |
                            (?&PerlExpression)?+
                        )                              (?>(?&PerlOWS))
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            |
                (?>(?&PPR_X_non_reserved_identifier)) (?>(?&PerlOWS))
                (?>
                    \(                              (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))     (?&PerlOWS)  )?+
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))           (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))        (?&PerlNWS)
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            )
    )) # End of rule

        (?<PerlVariableDeclaration>   (?<PerlStdVariableDeclaration>
            (?> my | our | state ) \b           (?>(?&PerlOWS))
            (?: (?&PerlQualifiedIdentifier)        (?&PerlOWS)  )?+
            (?>(?&PerlLvalue))                  (?>(?&PerlOWS))
            (?&PerlAttributes)?+
    )) # End of rule

        (?<PerlDoBlock>   (?<PerlStdDoBlock>
            do (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlEvalBlock>   (?<PerlStdEvalBlock>
            eval (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlTryCatchFinallyBlock>   (?<PerlStdTryCatchFinallyBlock>

                try \b                                (?>(?&PerlOWS))
                (?>(?&PerlBlock))
                                                      (?>(?&PerlOWS))
                catch \b                              (?>(?&PerlOWS))
                \(  (?>(?&PerlVariableScalar))  \)    (?>(?&PerlOWS))
                (?>(?&PerlBlock))

            (?:
                                                      (?>(?&PerlOWS))
                finally \b                            (?>(?&PerlOWS))
                (?>(?&PerlBlock))
            )?+
    )) # End of rule

        (?<PerlAttributes>   (?<PerlStdAttributes>
            :
            (?>(?&PerlOWS))
            (?>(?&PerlIdentifier))
            (?:
                (?= \( ) (?&PPR_X_quotelike_body)
            )?+

            (?:
                (?> (?>(?&PerlOWS)) : (?&PerlOWS) | (?&PerlNWS) )
                (?>(?&PerlIdentifier))
                (?:
                    (?= \( ) (?&PPR_X_quotelike_body)
                )?+
            )*+
    )) # End of rule

        (?<PerlList>   (?<PerlStdList>
            (?> (?&PerlParenthesesList) | (?&PerlCommaList) )
    )) # End of rule

        (?<PerlParenthesesList>   (?<PerlStdParenthesesList>
            \(  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \)
    )) # End of rule

        (?<PerlAnonymousArray>   (?<PerlStdAnonymousArray>
            \[  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \]
    )) # End of rule

        (?<PerlAnonymousHash>   (?<PerlStdAnonymousHash>
            \{  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+ \}
    )) # End of rule

        (?<PerlArrayIndexer>   (?<PerlStdArrayIndexer>
            \[                          (?>(?&PerlOWS))
                (?>(?&PerlExpression))  (?>(?&PerlOWS))
            \]
    )) # End of rule

        (?<PerlHashIndexer>   (?<PerlStdHashIndexer>
            \{  (?>(?&PerlOWS))
                (?: -?+ (?&PerlIdentifier) | (?&PerlExpression) )  # (Note: MUST allow backtracking here)
                (?>(?&PerlOWS))
            \}
    )) # End of rule

        (?<PerlDiamondOperator>   (?<PerlStdDiamondOperator>
            <<>>    # Perl 5.22 "double diamond"
        |
            < (?! < )
                (?>(?&PPR_X_balanced_angles))
            >
            (?=
                (?>(?&PerlOWSOrEND))
                (?> \z | [,;\}\])?] | => | : (?! :)        # (
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule

        (?<PerlComma>   (?<PerlStdComma>
            (?> , | => )
    )) # End of rule

        (?<PerlPrefixUnaryOperator>   (?<PerlStdPrefixUnaryOperator>
            (?> \+\+ | -- | [!\\+~] | - (?! (?&PPR_X_filetest_name) \b ) )
    )) # End of rule

        (?<PerlPostfixUnaryOperator>   (?<PerlStdPostfixUnaryOperator>
            (?> \+\+  |  -- )
    )) # End of rule

        (?<PerlInfixBinaryOperator>   (?<PerlStdInfixBinaryOperator>
            (?>  [=!][~=]
            |    cmp
            |    <= >?+
            |    >=
            |    [lg][te]
            |    eq
            |    ne
            |    [+]             (?! [+=] )
            |     -              (?! [-=] )
            |    [.]{2,3}+
            |    [.%x]           (?! [=]  )
            |    [&|^][.]        (?! [=]  )
            |    [<>*&|/]{1,2}+  (?! [=]  )
            |    \^              (?! [=]  )
            |    ~~
            |    isa
            )
    )) # End of rule

        (?<PerlAssignmentOperator>   (?<PerlStdAssignmentOperator>
            (?:  [<>*&|/]{2}
            |  [-+.*/%x]
            |  [&|^][.]?+
            )?+
            =
            (?! > )
    )) # End of rule

        (?<PerlLowPrecedenceInfixOperator>   (?<PerlStdLowPrecedenceInfixOperator>
            (?> or | and | xor )
    )) # End of rule

        (?<PerlAnonymousSubroutine>   (?<PerlStdAnonymousSubroutine>
            sub \b
            (?>(?&PerlOWS))
            (?:
                # Perl pre 5.028
                (?:
                    (?>
                        (?&PerlSignature)    # Parameter list
                    |
                        \( [^)]*+ \)         # Prototype (
                    )
                    (?&PerlOWS)
                )?+
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            |
                # Perl post 5.028
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
                (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
            )
            (?&PerlBlock)
    )) # End of rule

        (?<PerlVariable>   (?<PerlStdVariable>
            (?= [\$\@%] )
            (?>
                (?&PerlScalarAccess)
            |   (?&PerlHashAccess)
            |   (?&PerlArrayAccess)
            )
            (?> (?&PerlTermPostfixDereference) )?+
    )) # End of rule

        (?<PerlTypeglob>   (?<PerlStdTypeglob>
            \*
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier))  (?: :: )?+
            |
                (?&PerlVariableScalar)
            |
                [][!"#\$%&'()*+,./:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccess>   (?<PerlStdArrayAccess>
            (?>(?&PerlVariableArray))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccessNoSpace>   (?<PerlStdArrayAccessNoSpace>
            (?>(?&PerlVariableArrayNoSpace))

            # Optional arrowless access(es) to begin
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any number of optional arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlArrayAccessNoSpaceNoArrow>   (?<PerlStdArrayAccessNoSpaceNoArrow>
            (?>(?&PerlVariableArray))
            (?:
                (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
            )*+
    )) # End of rule

        (?<PerlHashAccess>   (?<PerlStdHashAccess>
            (?>(?&PerlVariableHash))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlScalarAccess>   (?<PerlStdScalarAccess>
            (?>(?&PerlVariableScalar))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlScalarAccessNoSpace>   (?<PerlStdScalarAccessNoSpace>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) to begin...
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any nuber of arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlScalarAccessNoSpaceNoArrow>   (?<PerlStdScalarAccessNoSpaceNoArrow>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) (but parens can't be first)...
            (?:
                (?! \( )
                (?:
                    (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlVariableScalar>   (?<PerlStdVariableScalar>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
                (?&PerlOWS)
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ [!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-] \}
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableScalarNoSpace>   (?<PerlStdVariableScalarNoSpace>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableArray>   (?<PerlStdVariableArray>
            \@     (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableArrayNoSpace>   (?<PerlStdVariableArrayNoSpace>
            \@
            (?: \$ )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableHash>   (?<PerlStdVariableHash>
            %      (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)?+
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlLabel>   (?<PerlStdLabel>
            (?! (?> [msy] | q[wrxq]?+ | tr ) \b )
            (?>(?&PerlIdentifier))
            : (?! : )
    )) # End of rule

        (?<PerlLiteral>   (?<PerlStdLiteral>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlNumber)
            |   (?&PerlBareword)
            )
    )) # End of rule

        (?<PerlString>   (?<PerlStdString>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                (?: q \b | qq (?= (?>(?&PerlOWS)) ' ) )
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            |
                qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            |
                (?&PerlHeredoc)
            |
                (?&PerlVString)
            )
    )) # End of rule

        (?<PerlQuotelike>   (?<PerlStdQuotelike>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlQuotelikeQX)
            |   (?&PerlContextualMatch)
            |   (?&PerlQuotelikeS)
            |   (?&PerlQuotelikeTR)
            )
    )) # End of rule

        (?<PerlHeredoc>   (?<PerlStdHeredoc>
            # Match the introducer...
            <<
            (?<_heredoc_indented> [~]?+ )

            # Match the terminator specification...
            (?>
                \\?+   (?<_heredoc_terminator>  (?&PerlIdentifier)              )
            |
                (?>(?&PerlOWS))
                (?>
                    "  (?<_heredoc_terminator>  [^"\\]*+  (?: \\. [^"\\]*+ )*+  )  "  #"
                |
                    (?<PPR_X_HD_nointerp> ' )
                    (?<_heredoc_terminator>  [^'\\]*+  (?: \\. [^'\\]*+ )*+  )  '  #'
                |
                    `  (?<_heredoc_terminator>  [^`\\]*+  (?: \\. [^`\\]*+ )*+  )  `  #`
                )
            |
                    (?<_heredoc_terminator>                                  )
            )

            # Do we need to reset the heredoc cache???
            (?====================================================================================================================================================================================================================================================================)

            # Do we need to cache content lookahead for this heredoc???
            (?(?==============================================================================================================================================================================)

                # Lookahead to detect and remember trailing contents of heredoc
                (?=
                    [^\n]*+ \n                                   # Go to the end of the current line
                    (?==========)                                # Remember the start of the contents
                    (?==========================================)   # Skip earlier heredoc contents
                    (?>                                          # The heredoc contents consist of...
                        (?:
                            (?!
                                (?(?=========================) \h*+ )   # An indent (if it was a <<~)
                                \g{_heredoc_terminator}                 # The terminator
                                (?: \n | \z )                           # At an end-of-line
                            )
                            (?(<PPR_X_HD_nointerp>)
                                [^\n]*+ \n
                            |
                                [^\n\$\@]*+
                                (?:
                                    (?>
                                        (?===========================================)
                                        (?= \$ )  (?&PerlScalarAccess)
                                        (?===============================)
                                    |
                                        (?===========================================)
                                        (?= \@ )  (?&PerlArrayAccess)
                                        (?===============================)
                                    )
                                    [^\n\$\@]*+
                                )*+
                                \n (?==========================================)
                            )
                        )*+

                        (?(?=========================) \h*+ )            # An indent (if it was a <<~)
                        \g{_heredoc_terminator}                          # The specified terminator
                        (?: \n | \z )                                    # Followed by EOL
                    )

                    # Then memoize the skip for when it's subsequently needed by PerlOWS or PerlNWS...
                    (?===============================================================================================================================================================================================================================================================================================================================================================================)
                )
            )

    )) # End of rule

        (?<PerlQuotelikeQ>   (?<PerlStdQuotelikeQ>
            (?>
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                \b q \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQQ>   (?<PerlStdQuotelikeQQ>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                \b qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            )
    )) # End of rule

        (?<PerlQuotelikeQW>   (?<PerlStdQuotelikeQW>
            (?>
                qw \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQX>   (?<PerlStdQuotelikeQX>
            (?>
                `  [^`]*+  (?: \\. [^`]*+ )*+  `
            |
                qx
                    (?>
                        (?= (?>(?&PerlOWS)) ' )
                        (?&PPR_X_quotelike_body)
                    |
                        \b (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                        (?&PPR_X_quotelike_body_interpolated)
                    )
            )
    )) # End of rule

        (?<PerlQuotelikeS>   (?<PerlStdQuotelikeS>
        (?<PerlSubstitution>   (?<PerlStdSubstitution>
            s \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{]                 # )
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_regex_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Single-quoted syntax...
                (?= (?>(?&PerlOWS)) ' )
                (?>(?&PPR_X_regex_body_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Delimited syntax...
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            )
            [msixpodualgcern]*+
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeTR>   (?<PerlStdQuotelikeTR>
        (?<PerlTransliteration>   (?<PerlStdTransliteration>
            (?> tr | y ) \b
            (?! (?>(?&PerlOWS)) => )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{\«]                 # )]
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_quotelike_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Delimited syntax...
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            )
            [cdsr]*+
    )) # End of rule
    )) # End of rule

        (?<PerlContextualQuotelikeM>   (?<PerlStdContextualQuotelikeM>
        (?<PerlContextualMatch>   (?<PerlStdContextualMatch>
            (?<PerlQuotelikeM>
            (?<PerlMatch>
                (?>
                    \/\/
                |
                    (?>
                        m (?= [#] )
                    |
                        m \b
                        (?! (?>(?&PerlOWS)) => )
                    |
                        (?= \/ [^/] )
                    )
                    (?&PPR_X_regex_body_interpolated)
                )
                [msixpodualgcn]*+
            ) # End of rule (?<PerlMatch>)
            ) # End of rule (?<PerlQuotelikeM>)
            (?=
                (?>(?&PerlOWS))
                (?> \z | [,;\}\])?] | => | : (?! :)
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeQR>   (?<PerlStdQuotelikeQR>
            qr \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>(?&PPR_X_regex_body_interpolated))
            [msixpodualn]*+
    )) # End of rule

        (?<PerlRegex>   (?<PerlStdRegex>
            (?>
                (?&PerlMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule

        (?<PerlContextualRegex>   (?<PerlStdContextualRegex>
            (?>
                (?&PerlContextualMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule


        (?<PerlBuiltinFunction>   (?<PerlStdBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?=[^\W\d]) # Skip if possible
            (?>
                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(?>at|udy)|leep|rand|qrt|ay|in)
                | 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)
                | r(?>e(?>ad(?>lin[ek]|pipe|dir)?|(?>quir|vers|nam)e|winddir|turn|set|cv|do|f)|index|mdir|and)
                | c(?>h(?>o(?>m?p|wn)|r(?>oot)?|dir|mod)|o(?>n(?>tinue|nect)|s)|lose(?>dir)?|aller|rypt)
                | e(?>nd(?>(?>hos|ne)t|p(?>roto|w)|serv|gr)ent|x(?>i(?>sts|t)|ec|p)|ach|val(?>bytes)?+|of)
                | l(?>o(?>c(?>al(?>time)?|k)|g)|i(?>sten|nk)|(?>sta|as)t|c(?>first)?|ength)
                | u(?>n(?>(?>lin|pac)k|shift|def|tie)|c(?>first)?|mask|time)
                | p(?>r(?>ototype|intf?)|ack(?>age)?|o[ps]|ipe|ush)
                | d(?>bm(?>close|open)|e(?>fined|lete)|ump|ie|o)
                | f(?>or(?>m(?>line|at)|k)|ileno|cntl|c|lock)
                | t(?>i(?>mes?|ed?)|ell(?>dir)?|runcate)
                | w(?>a(?>it(?>pid)?|ntarray|rn)|rite)
                | m(?>sg(?>ctl|get|rcv|snd)|kdir|ap)
                | b(?>in(?>mode|d)|less|reak)
                | i(?>n(?>dex|t)|mport|octl)
                | a(?>ccept|larm|tan2|bs)
                | o(?>pen(?>dir)?|ct|rd)
                | v(?>alues|ec)
                | k(?>eys|ill)
                | quotemeta
                | join
                | next
                | hex
                | _
            )
            \b
    )) # End of rule

        (?<PerlNullaryBuiltinFunction>   (?<PerlStdNullaryBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?= [^\W\d] )  # Skip if possible
            (?>
                get(?:(?:(?:hos|ne)t|serv|gr)ent|p(?:(?:roto|w)ent|pid)|login)
                | end(?:(?:hos|ne)t|p(?:roto|w)|serv|gr)ent
                | wa(?:ntarray|it)
                | times?
                | fork
                | _
            )
            \b
    )) # End of rule

        (?<PerlVersionNumber>   (?<PerlStdVersionNumber>
            (?>
                (?&PerlVString)
            |
                (?>(?&PPR_X_digit_seq))
                (?: \. (?&PPR_X_digit_seq)?+ )*+
            )
    )) # End of rule

        (?<PerlVString>   (?<PerlStdVString>
            v  (?>(?&PPR_X_digit_seq))  (?: \. (?&PPR_X_digit_seq) )*+
    )) # End of rule

        (?<PerlNumber>   (?<PerlStdNumber>
            [+-]?+
            (?>
                0  (?>  x   (?&PPR_X_x_digit_seq)
                |       b   (?&PPR_X_b_digit_seq)
                |       o?  (?&PPR_X_o_digit_seq)
                )
            |
                (?>
                        (?>(?&PPR_X_digit_seq))
                    (?: \. (?&PPR_X_digit_seq)?+ )?+
                |
                        \. (?&PPR_X_digit_seq)
                )
                (?: [eE] [+-]?+ (?&PPR_X_digit_seq) )?+
            )
    )) # End of rule

        (?<PerlOldQualifiedIdentifier>   (?<PerlStdOldQualifiedIdentifier>
            (?> (?> :: | ' ) \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlQualifiedIdentifier>   (?<PerlStdQualifiedIdentifier>
            (?>     ::       \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlIdentifier>   (?<PerlStdIdentifier>
                                    [^\W\d]\w*+
    )) # End of rule

        (?<PerlBareword>   (?<PerlStdBareword>
            (?! (?> (?= \w )
                    (?> for(?:each)?+ | while | if      | unless | until | use | no
                    |   given         | when  | sub     | return | my    | our | state
                    |   try           | catch | finally | defer
                    )
                |   (?&PPR_X_named_op)
                |   __ (?> END | DATA ) __ \b
                ) \b
                (?! (?>(?&PerlOWS)) => )
            )
            (?! (?> q[qwrx]?+ | [mys] | tr ) \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            )
            (?: :: )?+
            [^\W\d]\w*+
            (?: (?: :: | ' )  [^\W\d]\w*+  )*+
            (?: :: )?+
            (?! \( )    # )
        |
            :: (?! \w | \{ )
    )) # End of rule

        (?<PerlKeyword>   (?<PerlStdKeyword>
            (?!)    # None, by default, but can be overridden in a composing regex
    )) # End of rule

        (?<PerlPodSequence>   (?<PerlStdPodSequence>
            (?>(?&PerlOWS))  (?: (?>(?&PerlPod))  (?&PerlOWS) )*+
    )) # End of rule

        (?<PerlPod>   (?<PerlStdPod>
            ^ = [^\W\d]\w*+             # A line starting with =<identifier>
            .*?                         # Up to the first...
            (?>
                ^ = cut \b [^\n]*+ $    # ...line starting with =cut
            |                           # or
                \z                      # ...EOF
            )
    )) # End of rule


        ##### Whitespace matching (part of API) #################################

        (?<PerlOWSOrEND>   (?<PerlStdOWSOrEND>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            |
                __ (?> END | DATA ) __ \b .*+ \z
            )*+
    )) # End of rule

        (?<PerlOWS>   (?<PerlStdOWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )*+
    )) # End of rule

        (?<PerlNWS>   (?<PerlStdNWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )++
    )) # End of rule

        (?<PerlEndOfLine>   (?<PerlStdEndOfLine>
            \n
    )) # End of rule


        ###### Internal components (not part of API) ##########################

        (?<PPR_X_named_op>
            (?> cmp
            |   [lg][te]
            |   eq
            |   ne
            |   and
            |   or
            |   xor
            )
        ) # End of rule (?<PPR_X_named_op>)

        (?<PPR_X_non_reserved_identifier>
            (?! (?>
                   for(?:each)?+ | while   | if    | unless | until | given | when | default
                |  sub | format  | use     | no    | my     | our   | state
                |  try | catch   | finally | defer
                |  (?&PPR_X_named_op)
                |  [msy] | q[wrxq]?+ | tr
                |   __ (?> END | DATA ) __
                )
                \b
            )
            (?>(?&PerlQualifiedIdentifier))
            (?! :: )
        ) # End of rule (?<PPR_X_non_reserved_identifier>)

        (?<PPR_X_three_part_list>
            \(  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            \)
        ) # End of rule (?<PPR_X_three_part_list>)

        (?<PPR_X_indirect_obj>
            (?&PerlBareword)
        |
            (?>(?&PerlVariableScalar))
            (?! (?>(?&PerlOWS)) (?> [<\[\{] | -> ) )
        ) # End of rule (?<PPR_X_indirect_obj>)

        (?<PPR_X_quotelike_body>
            (?>(?&PPR_X_quotelike_body_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body>)

        (?<PPR_X_balanced_parens>
            [^)(\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^)(\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens>)

        (?<PPR_X_balanced_curlies>
            [^\}\{\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^\}\{\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies>)

        (?<PPR_X_balanced_squares>
            [^][\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?&PPR_X_balanced_squares)  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^][\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares>)

        (?<PPR_X_balanced_angles>
            [^><\\\n]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^><\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles>)

        (?<PPR_X_balanced_unicode_delims>
            (?============================)* <-- HERE +
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                (?============================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims>)

        (?<PPR_X_regex_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))            (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))            (?= \] )
                |
                    \(  (?>
                            \?{1,2}+ (?= \{ )
                            (?>(?&PerlBlock))
                        |
                            (?! \?{1,2}+ \{ )
                            (?>(?&PPR_X_balanced_parens))
                        )                                       (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))              (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_regex_body_unclosed>)

        (?<PPR_X_quotelike_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))        (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))        (?= \] )
                |
                    \(  (?>(?&PPR_X_balanced_parens))         (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))          (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_quotelike_body_unclosed>)

        (?<PPR_X_quotelike_body_interpolated>
            (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated>)

        (?<PPR_X_regex_body_interpolated>
            (?>(?&PPR_X_regex_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_regex_body_interpolated>)

        (?<PPR_X_balanced_parens_regex_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_regex_interpolated>)

        (?<PPR_X_balanced_curlies_regex_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_regex_interpolated>)

        (?<PPR_X_balanced_squares_regex_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\](|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\](|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_regex_interpolated>)

        (?<PPR_X_balanced_angles_regex_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_regex_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_regex_interpolated>)


        (?<PPR_X_balanced_unicode_delims_regex_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=======================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?========================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlScalarAccessNoSpace)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_regex_interpolated>)


        (?<PPR_X_balanced_parens_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_interpolated>)

        (?<PPR_X_balanced_curlies_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_interpolated>)

        (?<PPR_X_balanced_squares_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\]] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\]] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_interpolated>)

        (?<PPR_X_balanced_unicode_delims_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! \s | (?======================) ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! \s | (?======================) ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_interpolated>)

        (?<PPR_X_balanced_angles_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_interpolated>)

        (?<PPR_X_regex_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#|()] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#|()] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_regex_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s|()-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s|()-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_regex_body_unclosed)
        ) # End of rule (?<PPR_X_regex_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_quotelike_body_unclosed)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_s_e_check>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body_interpolated)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check>)

        (?<PPR_X_quotelike_s_e_check_uninterpolated>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check_uninterpolated>)

        (?<PPR_X_filetest_name>   [ABCMORSTWXbcdefgkloprstuwxz]          )

        (?<PPR_X_digit_seq>               \d++ (?: _?+         \d++ )*+  )
        (?<PPR_X_x_digit_seq>     [\da-fA-F]++ (?: _?+ [\da-fA-F]++ )*+  )
        (?<PPR_X_o_digit_seq>          [0-7]++ (?: _?+      [0-7]++ )*+  )
        (?<PPR_X_b_digit_seq>          [0-1]++ (?: _?+      [0-1]++ )*+  )

        (?<PPR_X_newline_and_heredoc>
            \n (?===================================================================================================)
        ) # End of rule (?<PPR_X_newline_and_heredoc>)
    )
    # END OF GRAMMAR
)/ at (eval 33) line 2198.
t/plugin-postfixderef.t ......... 
Dubious, test returned 255 (wstat 65280, 0xff00)
No subtests run 
(?============================)* matches null string many times in regex; marked by <-- HERE in m/(?(DEFINE)

(?<PerlSubroutineDeclaration>(?<PerlWrapperSubroutineDeclaration_001>(?&PerlBabbleInnerMatch)|(?&PerlStdSubroutineDeclaration)))
(?<PerlBabbleInnerMatch>(?<PerlWrapperBabbleInnerMatch_001>((?&PerlStdBabbleInnerMatch))(?================================================================)))
(?<PerlStdBabbleInnerMatch>sub \b (?&PerlOWS) (?&PerlOldQualifiedIdentifier) (?&PerlOWS)(?: (?>(?&PerlAttributes)) (?&PerlOWS) )?+(?&PerlBlock)(?&PerlOWS))

) (?^umsx:
    (?(DEFINE)

        (?<PerlEntireDocument>   (?<PerlStdEntireDocument>
            \A
            (?&PerlDocument)
            (?:
                \Z
            |
                (?(?===========================)
                    (?>(?&PerlOWSOrEND))  (?=======)  ([^\n]++)
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlDocument>   (?<PerlStdDocument>
            \x{FEFF}?+                      # Optional BOM marker
            (?&PerlStatementSequence)
            (?&PerlOWSOrEND)
    )) # End of rule

        (?<PerlStatementSequence>   (?<PerlStdStatementSequence>
            (?>(?&PerlPodSequence))
            (?:
                (?&PerlStatement)
                (?&PerlPodSequence)
            )*+
    )) # End of rule

        (?<PerlStatement>   (?<PerlStdStatement>
            (?>
                (?>(?&PerlPodSequence))
                (?: (?>(?&PerlLabel)) (?&PerlOWSOrEND) )?+
                (?>(?&PerlPodSequence))
                (?>
                    (?&PerlKeyword)
                |
                    (?&PerlSubroutineDeclaration)
                |
                    (?&PerlUseStatement)
                |
                    (?&PerlPackageDeclaration)
                |
                    (?&PerlControlBlock)
                |
                    (?&PerlFormat)
                |
                    (?>(?&PerlExpression))          (?>(?&PerlOWS))
                    (?&PerlStatementModifier)?+     (?>(?&PerlOWSOrEND))
                    (?> ; | (?= \} | \z ))
                |
                    (?&PerlBlock)
                |
                    ;
                )

            | # A yada-yada...
                \.\.\. (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just a label...
                (?>(?&PerlLabel)) (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just an empty statement...
                (?>(?&PerlOWS)) ;

            | # An error (report it, if it's the first)...
                (?(?===========================)
                    (?> (?&PerlOWS) )
                    (?! (?: \} | \z ) )
                    (?=========)
                    ( (?&PerlExpression) (?&PerlOWS) [^\n]++ | [^;\}]++ )
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlSubroutineDeclaration>   (?<PerlStdSubroutineDeclaration>
        (?>
            (?: (?> my | our | state ) \b      (?>(?&PerlOWS)) )?+
            sub \b                             (?>(?&PerlOWS))
            (?>(?&PerlOldQualifiedIdentifier))    (?&PerlOWS)
        |
            AUTOLOAD                              (?&PerlOWS)
        |
            DESTROY                               (?&PerlOWS)
        )
        (?:
            # Perl pre 5.028
            (?:
                (?>
                    (?&PerlSignature)    # Parameter list
                |
                    \( [^)]*+ \)         # Prototype (
                )
                (?&PerlOWS)
            )?+
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
        |
            # Perl post 5.028
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
        )
        (?> ; | (?&PerlBlock) )
    )) # End of rule

        (?<PerlSignature>   (?<PerlStdSignature>
            \(
                (?>(?&PerlOWS))
                (?&PerlParameterDeclaration)*+
            \)
    )) # End of rule

        (?<PerlParameterDeclaration>   (?<PerlStdParameterDeclaration>
            (?:
                    \$  (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)?+ (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableScalar) (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)   (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableArray) (?>(?&PerlOWS))
            |
                (?&PerlVariableHash)  (?>(?&PerlOWS))
            )
            (?: , (?>(?&PerlOWS))  |  (?= \) ) )     # (
    )) # End of rule


        (?<PerlUseStatement>   (?<PerlStdUseStatement>
        (?: use | no ) (?>(?&PerlNWS))
        (?>
            (?&PerlVersionNumber)
        |
            (?>(?&PerlQualifiedIdentifier))
            (?: (?>(?&PerlNWS)) (?&PerlVersionNumber)
                (?! (?>(?&PerlOWS)) (?> (?&PerlInfixBinaryOperator) | (?&PerlComma) | \? ) )
            )?+
            (?: (?>(?&PerlNWS)) (?&PerlPodSequence) )?+
            (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        )
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlReturnExpression>   (?<PerlStdReturnExpression>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
    )) # End of rule

        (?<PerlReturnStatement>   (?<PerlStdReturnStatement>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlPackageDeclaration>   (?<PerlStdPackageDeclaration>
        package
            (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
        (?: (?>(?&PerlNWS)) (?&PerlVersionNumber) )?+
            (?>(?&PerlOWSOrEND)) (?> ; | (?&PerlBlock) | (?= \} | \z ))
    )) # End of rule

        (?<PerlExpression>   (?<PerlStdExpression>
                                (?>(?&PerlLowPrecedenceNotExpression))
            (?: (?>(?&PerlOWS)) (?>(?&PerlLowPrecedenceInfixOperator))
                (?>(?&PerlOWS))    (?&PerlLowPrecedenceNotExpression)  )*+
    )) # End of rule

        (?<PerlLowPrecedenceNotExpression>   (?<PerlStdLowPrecedenceNotExpression>
            (?: not \b (?&PerlOWS) )*+  (?&PerlCommaList)
    )) # End of rule

        (?<PerlCommaList>   (?<PerlStdCommaList>
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            (?:
                (?: (?>(?&PerlComma))          (?&PerlOWS)   )++
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            )*+
                (?: (?>(?&PerlComma))          (?&PerlOWSOrEND)   )*+
    )) # End of rule

        (?<PerlAssignment>   (?<PerlStdAssignment>
                                (?>(?&PerlConditionalExpression))
            (?:
                (?>(?&PerlOWS)) (?>(?&PerlAssignmentOperator))
                (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )*+
    )) # End of rule

        (?<PerlScalarExpression>   (?<PerlStdScalarExpression>
        (?<PerlConditionalExpression>   (?<PerlStdConditionalExpression>
            (?>(?&PerlBinaryExpression))
            (?:
                (?>(?&PerlOWS)) \? (?>(?&PerlOWS)) (?>(?&PerlAssignment))
                (?>(?&PerlOWS))  : (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )?+
    )) # End of rule
    )) # End of rule

        (?<PerlBinaryExpression>   (?<PerlStdBinaryExpression>
                                (?>(?&PerlPrefixPostfixTerm))
            (?: (?>(?&PerlOWS)) (?>(?&PerlInfixBinaryOperator))
                (?>(?&PerlOWS))    (?&PerlPrefixPostfixTerm) )*+
    )) # End of rule

        (?<PerlPrefixPostfixTerm>   (?<PerlStdPrefixPostfixTerm>
            (?: (?>(?&PerlPrefixUnaryOperator))  (?&PerlOWS) )*+
            (?>(?&PerlTerm))
            (?: (?>(?&PerlOWS)) (?&PerlPostfixUnaryOperator) )?+
    )) # End of rule

        (?<PerlLvalue>   (?<PerlStdLvalue>
            (?>
                \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier)
            |
                \(                                                                     (?>(?&PerlOWS))
                    (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )      (?>(?&PerlOWS))
                    (?:
                        (?>(?&PerlComma))                                              (?>(?&PerlOWS))
                        (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )  (?>(?&PerlOWS))
                    )*+
                    (?: (?>(?&PerlComma)) (?&PerlOWS) )?+
                \)
            )
    )) # End of rule

        (?<PerlTerm>   (?<PerlStdTerm>
            (?>
                (?&PerlReturnExpression)

            # The remaining alternatives can all take postfix dereferencers...
            | (?:
                    (?= \$ )  (?&PerlScalarAccess)
              |
                    (?= \@ )  (?&PerlArrayAccess)
              |
                    (?=  % )  (?&PerlHashAccess)
              |
                    (?&PerlAnonymousSubroutine)
              |
                    (?>(?&PerlNullaryBuiltinFunction))  (?! (?>(?&PerlOWS)) \( )
              |
                    (?&PerlDoBlock) | (?&PerlEvalBlock)
              |
                    (?&PerlCall)
              |
                    (?&PerlVariableDeclaration)
              |
                    (?&PerlTypeglob)
              |
                    (?>(?&PerlParenthesesList))

                    # Can optionally do a [...] lookup straight after the parens,
                    # followd by any number of other look-ups
                    (?:
                        (?>(?&PerlOWS)) (?&PerlArrayIndexer)
                        (?:
                            (?>(?&PerlOWS))
                            (?>
                                (?&PerlArrayIndexer)
                            |   (?&PerlHashIndexer)
                            |   (?&PerlParenthesesList)
                            )
                        )*+
                    )?+
              |
                    (?&PerlAnonymousArray)
              |
                    (?&PerlAnonymousHash)
              |
                    (?&PerlDiamondOperator)
              |
                    (?&PerlContextualMatch)
              |
                    (?&PerlQuotelikeS)
              |
                    (?&PerlQuotelikeTR)
              |
                    (?&PerlQuotelikeQX)
              |
                    (?&PerlLiteral)
              )

              (?: (?&PerlTermPostfixDereference) )?+
            )
    )) # End of rule

        (?<PerlTermPostfixDereference>   (?<PerlStdTermPostfixDereference>
            # Must have at least one arrowed dereference...
            (?:
                (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?>  (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    (?:
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    )*+

                |   # A method call...
                    (?> (?&PerlQualifiedIdentifier) | (?! \$\#\* ) (?&PerlVariableScalar) )
                    (?: (?>(?&PerlOWS)) (?&PerlParenthesesList) )?+

                |   # An array or hash slice or k/v slice
                    # (provided it's not subsequently dereferenced)
                    [\@%] (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS))  [\@%]?+  [\[\{] )

                |   # An array max-index lookup...
                    \$\#\*

                |   # A scalar-, glob-, or subroutine dereference...
                    [\$*&] \*

                |   # An array dereference (provided it's not subsequently dereferenced)...
                    \@\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\[\@] )

                |   # A hash dereference (provided it's not subsequently dereferenced)...
                    \%\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\{%] )

                |   # A glob lookup...
                    \* (?&PerlHashIndexer)
                )
            )++
    )) # End of rule

        (?<PerlControlBlock>   (?<PerlStdControlBlock>
            (?> # Conditionals...
                (?> if | unless ) \b                 (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))          (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    elsif \b                         (?>(?&PerlOWS))
                    (?>(?&PerlParenthesesList))      (?>(?&PerlOWS))
                    (?&PerlBlock)
                )*+

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    else \b                          (?>(?&PerlOWS))
                    (?&PerlBlock)
                )?+

            |   # Loops...
                (?>
                    for(?:each)?+ \b
                    (?>(?&PerlOWS))
                    (?:
                        (?> # Explicitly aliased iterator variable...
                            (?> \\ (?>(?&PerlOWS))  (?> my | our | state )
                            |                       (?> my | our | state )  (?>(?&PerlOWS)) \\
                            )
                            (?>(?&PerlOWS))
                            (?> (?&PerlVariableScalar)
                            |   (?&PerlVariableArray)
                            |   (?&PerlVariableHash)
                            )
                        |
                            # List of scalar iterator variables...
                            my                                   (?>(?&PerlOWS))
                            \(                                   (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                (?: ,                            (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                )*+
                                (?: ,                            (?>(?&PerlOWS)) )?+
                            \)

                        |
                            # Implicitly aliased iterator variable...
                            (?> (?: my | our | state ) (?>(?&PerlOWS)) )?+
                            (?&PerlVariableScalar)
                        )?+
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlQuotelikeQW) )
                    |
                        (?&PPR_X_three_part_list)
                    )
                |
                    (?> while | until) \b (?>(?&PerlOWS))
                    (?&PerlParenthesesList)
                )

                (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                    (?>(?&PerlOWS))   continue
                    (?>(?&PerlOWS))   (?&PerlBlock)
                )?+

            | # Phasers...
                (?> BEGIN | END | CHECK | INIT | UNITCHECK ) \b   (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Try/catch/finallys...
                (?>(?&PerlTryCatchFinallyBlock))

            | # Defers...
                defer                                     (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Switches...
                (?> given | when ) \b                     (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))               (?>(?&PerlOWS))
                (?&PerlBlock)
            |
                default                                   (?>(?&PerlOWS))
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlFormat>   (?<PerlStdFormat>
            format
            (?: (?>(?&PerlNWS))  (?&PerlQualifiedIdentifier)  )?+
                (?>(?&PerlOWS))  = [^\n]*+
                (?&PPR_X_newline_and_heredoc)
            (?:
                (?! \. \n )
                [^\n\$\@]*+
                (?:
                    (?>
                        (?= \$ (?! \s ) )  (?&PerlScalarAccessNoSpace)
                    |
                        (?= \@ (?! \s ) )  (?&PerlArrayAccessNoSpace)
                    )
                    [^\n\$\@]*+
                )*+
                (?&PPR_X_newline_and_heredoc)
            )*+
            \. (?&PerlEndOfLine)
    )) # End of rule

        (?<PerlStatementModifier>   (?<PerlStdStatementModifier>
            (?> if | for(?:each)?+ | while | unless | until | when )
            \b
            (?>(?&PerlOWS))
            (?&PerlExpression)
    )) # End of rule

        (?<PerlBlock>   (?<PerlStdBlock>
            \{  (?>(?&PerlStatementSequence))  \}
    )) # End of rule

        (?<PerlCall>   (?<PerlStdCall>
            (?>
                [&]                                    (?>(?&PerlOWS))
                (?> (?&PerlBlock)
                |   (?&PerlVariableScalar)
                |   (?&PerlQualifiedIdentifier)
                )                                      (?>(?&PerlOWS))
                (?:
                    \(                                 (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))        (?&PerlOWS)   )?+
                    \)
                )?+
            |
                - (?>(?&PPR_X_filetest_name))            (?>(?&PerlOWS))
                (?&PerlPrefixPostfixTerm)?+
            |
                (?>(?&PerlBuiltinFunction))            (?>(?&PerlOWS))
                (?>
                    \(                                 (?>(?&PerlOWS))
                        (?>
                            (?= (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlExpression)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlExpression)
                        |
                            (?&PerlExpression)?+
                        )                              (?>(?&PerlOWS))
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            |
                (?>(?&PPR_X_non_reserved_identifier)) (?>(?&PerlOWS))
                (?>
                    \(                              (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))     (?&PerlOWS)  )?+
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))           (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))        (?&PerlNWS)
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            )
    )) # End of rule

        (?<PerlVariableDeclaration>   (?<PerlStdVariableDeclaration>
            (?> my | our | state ) \b           (?>(?&PerlOWS))
            (?: (?&PerlQualifiedIdentifier)        (?&PerlOWS)  )?+
            (?>(?&PerlLvalue))                  (?>(?&PerlOWS))
            (?&PerlAttributes)?+
    )) # End of rule

        (?<PerlDoBlock>   (?<PerlStdDoBlock>
            do (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlEvalBlock>   (?<PerlStdEvalBlock>
            eval (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlTryCatchFinallyBlock>   (?<PerlStdTryCatchFinallyBlock>

                try \b                                (?>(?&PerlOWS))
                (?>(?&PerlBlock))
                                                      (?>(?&PerlOWS))
                catch \b                              (?>(?&PerlOWS))
                \(  (?>(?&PerlVariableScalar))  \)    (?>(?&PerlOWS))
                (?>(?&PerlBlock))

            (?:
                                                      (?>(?&PerlOWS))
                finally \b                            (?>(?&PerlOWS))
                (?>(?&PerlBlock))
            )?+
    )) # End of rule

        (?<PerlAttributes>   (?<PerlStdAttributes>
            :
            (?>(?&PerlOWS))
            (?>(?&PerlIdentifier))
            (?:
                (?= \( ) (?&PPR_X_quotelike_body)
            )?+

            (?:
                (?> (?>(?&PerlOWS)) : (?&PerlOWS) | (?&PerlNWS) )
                (?>(?&PerlIdentifier))
                (?:
                    (?= \( ) (?&PPR_X_quotelike_body)
                )?+
            )*+
    )) # End of rule

        (?<PerlList>   (?<PerlStdList>
            (?> (?&PerlParenthesesList) | (?&PerlCommaList) )
    )) # End of rule

        (?<PerlParenthesesList>   (?<PerlStdParenthesesList>
            \(  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \)
    )) # End of rule

        (?<PerlAnonymousArray>   (?<PerlStdAnonymousArray>
            \[  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \]
    )) # End of rule

        (?<PerlAnonymousHash>   (?<PerlStdAnonymousHash>
            \{  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+ \}
    )) # End of rule

        (?<PerlArrayIndexer>   (?<PerlStdArrayIndexer>
            \[                          (?>(?&PerlOWS))
                (?>(?&PerlExpression))  (?>(?&PerlOWS))
            \]
    )) # End of rule

        (?<PerlHashIndexer>   (?<PerlStdHashIndexer>
            \{  (?>(?&PerlOWS))
                (?: -?+ (?&PerlIdentifier) | (?&PerlExpression) )  # (Note: MUST allow backtracking here)
                (?>(?&PerlOWS))
            \}
    )) # End of rule

        (?<PerlDiamondOperator>   (?<PerlStdDiamondOperator>
            <<>>    # Perl 5.22 "double diamond"
        |
            < (?! < )
                (?>(?&PPR_X_balanced_angles))
            >
            (?=
                (?>(?&PerlOWSOrEND))
                (?> \z | [,;\}\])?] | => | : (?! :)        # (
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule

        (?<PerlComma>   (?<PerlStdComma>
            (?> , | => )
    )) # End of rule

        (?<PerlPrefixUnaryOperator>   (?<PerlStdPrefixUnaryOperator>
            (?> \+\+ | -- | [!\\+~] | - (?! (?&PPR_X_filetest_name) \b ) )
    )) # End of rule

        (?<PerlPostfixUnaryOperator>   (?<PerlStdPostfixUnaryOperator>
            (?> \+\+  |  -- )
    )) # End of rule

        (?<PerlInfixBinaryOperator>   (?<PerlStdInfixBinaryOperator>
            (?>  [=!][~=]
            |    cmp
            |    <= >?+
            |    >=
            |    [lg][te]
            |    eq
            |    ne
            |    [+]             (?! [+=] )
            |     -              (?! [-=] )
            |    [.]{2,3}+
            |    [.%x]           (?! [=]  )
            |    [&|^][.]        (?! [=]  )
            |    [<>*&|/]{1,2}+  (?! [=]  )
            |    \^              (?! [=]  )
            |    ~~
            |    isa
            )
    )) # End of rule

        (?<PerlAssignmentOperator>   (?<PerlStdAssignmentOperator>
            (?:  [<>*&|/]{2}
            |  [-+.*/%x]
            |  [&|^][.]?+
            )?+
            =
            (?! > )
    )) # End of rule

        (?<PerlLowPrecedenceInfixOperator>   (?<PerlStdLowPrecedenceInfixOperator>
            (?> or | and | xor )
    )) # End of rule

        (?<PerlAnonymousSubroutine>   (?<PerlStdAnonymousSubroutine>
            sub \b
            (?>(?&PerlOWS))
            (?:
                # Perl pre 5.028
                (?:
                    (?>
                        (?&PerlSignature)    # Parameter list
                    |
                        \( [^)]*+ \)         # Prototype (
                    )
                    (?&PerlOWS)
                )?+
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            |
                # Perl post 5.028
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
                (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
            )
            (?&PerlBlock)
    )) # End of rule

        (?<PerlVariable>   (?<PerlStdVariable>
            (?= [\$\@%] )
            (?>
                (?&PerlScalarAccess)
            |   (?&PerlHashAccess)
            |   (?&PerlArrayAccess)
            )
            (?> (?&PerlTermPostfixDereference) )?+
    )) # End of rule

        (?<PerlTypeglob>   (?<PerlStdTypeglob>
            \*
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier))  (?: :: )?+
            |
                (?&PerlVariableScalar)
            |
                [][!"#\$%&'()*+,./:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccess>   (?<PerlStdArrayAccess>
            (?>(?&PerlVariableArray))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccessNoSpace>   (?<PerlStdArrayAccessNoSpace>
            (?>(?&PerlVariableArrayNoSpace))

            # Optional arrowless access(es) to begin
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any number of optional arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlArrayAccessNoSpaceNoArrow>   (?<PerlStdArrayAccessNoSpaceNoArrow>
            (?>(?&PerlVariableArray))
            (?:
                (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
            )*+
    )) # End of rule

        (?<PerlHashAccess>   (?<PerlStdHashAccess>
            (?>(?&PerlVariableHash))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlScalarAccess>   (?<PerlStdScalarAccess>
            (?>(?&PerlVariableScalar))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlScalarAccessNoSpace>   (?<PerlStdScalarAccessNoSpace>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) to begin...
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any nuber of arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlScalarAccessNoSpaceNoArrow>   (?<PerlStdScalarAccessNoSpaceNoArrow>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) (but parens can't be first)...
            (?:
                (?! \( )
                (?:
                    (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlVariableScalar>   (?<PerlStdVariableScalar>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
                (?&PerlOWS)
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ [!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-] \}
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableScalarNoSpace>   (?<PerlStdVariableScalarNoSpace>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableArray>   (?<PerlStdVariableArray>
            \@     (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableArrayNoSpace>   (?<PerlStdVariableArrayNoSpace>
            \@
            (?: \$ )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableHash>   (?<PerlStdVariableHash>
            %      (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)?+
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlLabel>   (?<PerlStdLabel>
            (?! (?> [msy] | q[wrxq]?+ | tr ) \b )
            (?>(?&PerlIdentifier))
            : (?! : )
    )) # End of rule

        (?<PerlLiteral>   (?<PerlStdLiteral>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlNumber)
            |   (?&PerlBareword)
            )
    )) # End of rule

        (?<PerlString>   (?<PerlStdString>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                (?: q \b | qq (?= (?>(?&PerlOWS)) ' ) )
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            |
                qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            |
                (?&PerlHeredoc)
            |
                (?&PerlVString)
            )
    )) # End of rule

        (?<PerlQuotelike>   (?<PerlStdQuotelike>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlQuotelikeQX)
            |   (?&PerlContextualMatch)
            |   (?&PerlQuotelikeS)
            |   (?&PerlQuotelikeTR)
            )
    )) # End of rule

        (?<PerlHeredoc>   (?<PerlStdHeredoc>
            # Match the introducer...
            <<
            (?<_heredoc_indented> [~]?+ )

            # Match the terminator specification...
            (?>
                \\?+   (?<_heredoc_terminator>  (?&PerlIdentifier)              )
            |
                (?>(?&PerlOWS))
                (?>
                    "  (?<_heredoc_terminator>  [^"\\]*+  (?: \\. [^"\\]*+ )*+  )  "  #"
                |
                    (?<PPR_X_HD_nointerp> ' )
                    (?<_heredoc_terminator>  [^'\\]*+  (?: \\. [^'\\]*+ )*+  )  '  #'
                |
                    `  (?<_heredoc_terminator>  [^`\\]*+  (?: \\. [^`\\]*+ )*+  )  `  #`
                )
            |
                    (?<_heredoc_terminator>                                  )
            )

            # Do we need to reset the heredoc cache???
            (?====================================================================================================================================================================================================================================================================)

            # Do we need to cache content lookahead for this heredoc???
            (?(?==============================================================================================================================================================================)

                # Lookahead to detect and remember trailing contents of heredoc
                (?=
                    [^\n]*+ \n                                   # Go to the end of the current line
                    (?==========)                                # Remember the start of the contents
                    (?==========================================)   # Skip earlier heredoc contents
                    (?>                                          # The heredoc contents consist of...
                        (?:
                            (?!
                                (?(?=========================) \h*+ )   # An indent (if it was a <<~)
                                \g{_heredoc_terminator}                 # The terminator
                                (?: \n | \z )                           # At an end-of-line
                            )
                            (?(<PPR_X_HD_nointerp>)
                                [^\n]*+ \n
                            |
                                [^\n\$\@]*+
                                (?:
                                    (?>
                                        (?===========================================)
                                        (?= \$ )  (?&PerlScalarAccess)
                                        (?===============================)
                                    |
                                        (?===========================================)
                                        (?= \@ )  (?&PerlArrayAccess)
                                        (?===============================)
                                    )
                                    [^\n\$\@]*+
                                )*+
                                \n (?==========================================)
                            )
                        )*+

                        (?(?=========================) \h*+ )            # An indent (if it was a <<~)
                        \g{_heredoc_terminator}                          # The specified terminator
                        (?: \n | \z )                                    # Followed by EOL
                    )

                    # Then memoize the skip for when it's subsequently needed by PerlOWS or PerlNWS...
                    (?===============================================================================================================================================================================================================================================================================================================================================================================)
                )
            )

    )) # End of rule

        (?<PerlQuotelikeQ>   (?<PerlStdQuotelikeQ>
            (?>
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                \b q \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQQ>   (?<PerlStdQuotelikeQQ>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                \b qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            )
    )) # End of rule

        (?<PerlQuotelikeQW>   (?<PerlStdQuotelikeQW>
            (?>
                qw \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQX>   (?<PerlStdQuotelikeQX>
            (?>
                `  [^`]*+  (?: \\. [^`]*+ )*+  `
            |
                qx
                    (?>
                        (?= (?>(?&PerlOWS)) ' )
                        (?&PPR_X_quotelike_body)
                    |
                        \b (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                        (?&PPR_X_quotelike_body_interpolated)
                    )
            )
    )) # End of rule

        (?<PerlQuotelikeS>   (?<PerlStdQuotelikeS>
        (?<PerlSubstitution>   (?<PerlStdSubstitution>
            s \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{]                 # )
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_regex_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Single-quoted syntax...
                (?= (?>(?&PerlOWS)) ' )
                (?>(?&PPR_X_regex_body_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Delimited syntax...
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            )
            [msixpodualgcern]*+
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeTR>   (?<PerlStdQuotelikeTR>
        (?<PerlTransliteration>   (?<PerlStdTransliteration>
            (?> tr | y ) \b
            (?! (?>(?&PerlOWS)) => )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{\«]                 # )]
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_quotelike_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Delimited syntax...
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            )
            [cdsr]*+
    )) # End of rule
    )) # End of rule

        (?<PerlContextualQuotelikeM>   (?<PerlStdContextualQuotelikeM>
        (?<PerlContextualMatch>   (?<PerlStdContextualMatch>
            (?<PerlQuotelikeM>
            (?<PerlMatch>
                (?>
                    \/\/
                |
                    (?>
                        m (?= [#] )
                    |
                        m \b
                        (?! (?>(?&PerlOWS)) => )
                    |
                        (?= \/ [^/] )
                    )
                    (?&PPR_X_regex_body_interpolated)
                )
                [msixpodualgcn]*+
            ) # End of rule (?<PerlMatch>)
            ) # End of rule (?<PerlQuotelikeM>)
            (?=
                (?>(?&PerlOWS))
                (?> \z | [,;\}\])?] | => | : (?! :)
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeQR>   (?<PerlStdQuotelikeQR>
            qr \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>(?&PPR_X_regex_body_interpolated))
            [msixpodualn]*+
    )) # End of rule

        (?<PerlRegex>   (?<PerlStdRegex>
            (?>
                (?&PerlMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule

        (?<PerlContextualRegex>   (?<PerlStdContextualRegex>
            (?>
                (?&PerlContextualMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule


        (?<PerlBuiltinFunction>   (?<PerlStdBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?=[^\W\d]) # Skip if possible
            (?>
                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(?>at|udy)|leep|rand|qrt|ay|in)
                | 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)
                | r(?>e(?>ad(?>lin[ek]|pipe|dir)?|(?>quir|vers|nam)e|winddir|turn|set|cv|do|f)|index|mdir|and)
                | c(?>h(?>o(?>m?p|wn)|r(?>oot)?|dir|mod)|o(?>n(?>tinue|nect)|s)|lose(?>dir)?|aller|rypt)
                | e(?>nd(?>(?>hos|ne)t|p(?>roto|w)|serv|gr)ent|x(?>i(?>sts|t)|ec|p)|ach|val(?>bytes)?+|of)
                | l(?>o(?>c(?>al(?>time)?|k)|g)|i(?>sten|nk)|(?>sta|as)t|c(?>first)?|ength)
                | u(?>n(?>(?>lin|pac)k|shift|def|tie)|c(?>first)?|mask|time)
                | p(?>r(?>ototype|intf?)|ack(?>age)?|o[ps]|ipe|ush)
                | d(?>bm(?>close|open)|e(?>fined|lete)|ump|ie|o)
                | f(?>or(?>m(?>line|at)|k)|ileno|cntl|c|lock)
                | t(?>i(?>mes?|ed?)|ell(?>dir)?|runcate)
                | w(?>a(?>it(?>pid)?|ntarray|rn)|rite)
                | m(?>sg(?>ctl|get|rcv|snd)|kdir|ap)
                | b(?>in(?>mode|d)|less|reak)
                | i(?>n(?>dex|t)|mport|octl)
                | a(?>ccept|larm|tan2|bs)
                | o(?>pen(?>dir)?|ct|rd)
                | v(?>alues|ec)
                | k(?>eys|ill)
                | quotemeta
                | join
                | next
                | hex
                | _
            )
            \b
    )) # End of rule

        (?<PerlNullaryBuiltinFunction>   (?<PerlStdNullaryBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?= [^\W\d] )  # Skip if possible
            (?>
                get(?:(?:(?:hos|ne)t|serv|gr)ent|p(?:(?:roto|w)ent|pid)|login)
                | end(?:(?:hos|ne)t|p(?:roto|w)|serv|gr)ent
                | wa(?:ntarray|it)
                | times?
                | fork
                | _
            )
            \b
    )) # End of rule

        (?<PerlVersionNumber>   (?<PerlStdVersionNumber>
            (?>
                (?&PerlVString)
            |
                (?>(?&PPR_X_digit_seq))
                (?: \. (?&PPR_X_digit_seq)?+ )*+
            )
    )) # End of rule

        (?<PerlVString>   (?<PerlStdVString>
            v  (?>(?&PPR_X_digit_seq))  (?: \. (?&PPR_X_digit_seq) )*+
    )) # End of rule

        (?<PerlNumber>   (?<PerlStdNumber>
            [+-]?+
            (?>
                0  (?>  x   (?&PPR_X_x_digit_seq)
                |       b   (?&PPR_X_b_digit_seq)
                |       o?  (?&PPR_X_o_digit_seq)
                )
            |
                (?>
                        (?>(?&PPR_X_digit_seq))
                    (?: \. (?&PPR_X_digit_seq)?+ )?+
                |
                        \. (?&PPR_X_digit_seq)
                )
                (?: [eE] [+-]?+ (?&PPR_X_digit_seq) )?+
            )
    )) # End of rule

        (?<PerlOldQualifiedIdentifier>   (?<PerlStdOldQualifiedIdentifier>
            (?> (?> :: | ' ) \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlQualifiedIdentifier>   (?<PerlStdQualifiedIdentifier>
            (?>     ::       \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlIdentifier>   (?<PerlStdIdentifier>
                                    [^\W\d]\w*+
    )) # End of rule

        (?<PerlBareword>   (?<PerlStdBareword>
            (?! (?> (?= \w )
                    (?> for(?:each)?+ | while | if      | unless | until | use | no
                    |   given         | when  | sub     | return | my    | our | state
                    |   try           | catch | finally | defer
                    )
                |   (?&PPR_X_named_op)
                |   __ (?> END | DATA ) __ \b
                ) \b
                (?! (?>(?&PerlOWS)) => )
            )
            (?! (?> q[qwrx]?+ | [mys] | tr ) \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            )
            (?: :: )?+
            [^\W\d]\w*+
            (?: (?: :: | ' )  [^\W\d]\w*+  )*+
            (?: :: )?+
            (?! \( )    # )
        |
            :: (?! \w | \{ )
    )) # End of rule

        (?<PerlKeyword>   (?<PerlStdKeyword>
            (?!)    # None, by default, but can be overridden in a composing regex
    )) # End of rule

        (?<PerlPodSequence>   (?<PerlStdPodSequence>
            (?>(?&PerlOWS))  (?: (?>(?&PerlPod))  (?&PerlOWS) )*+
    )) # End of rule

        (?<PerlPod>   (?<PerlStdPod>
            ^ = [^\W\d]\w*+             # A line starting with =<identifier>
            .*?                         # Up to the first...
            (?>
                ^ = cut \b [^\n]*+ $    # ...line starting with =cut
            |                           # or
                \z                      # ...EOF
            )
    )) # End of rule


        ##### Whitespace matching (part of API) #################################

        (?<PerlOWSOrEND>   (?<PerlStdOWSOrEND>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            |
                __ (?> END | DATA ) __ \b .*+ \z
            )*+
    )) # End of rule

        (?<PerlOWS>   (?<PerlStdOWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )*+
    )) # End of rule

        (?<PerlNWS>   (?<PerlStdNWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )++
    )) # End of rule

        (?<PerlEndOfLine>   (?<PerlStdEndOfLine>
            \n
    )) # End of rule


        ###### Internal components (not part of API) ##########################

        (?<PPR_X_named_op>
            (?> cmp
            |   [lg][te]
            |   eq
            |   ne
            |   and
            |   or
            |   xor
            )
        ) # End of rule (?<PPR_X_named_op>)

        (?<PPR_X_non_reserved_identifier>
            (?! (?>
                   for(?:each)?+ | while   | if    | unless | until | given | when | default
                |  sub | format  | use     | no    | my     | our   | state
                |  try | catch   | finally | defer
                |  (?&PPR_X_named_op)
                |  [msy] | q[wrxq]?+ | tr
                |   __ (?> END | DATA ) __
                )
                \b
            )
            (?>(?&PerlQualifiedIdentifier))
            (?! :: )
        ) # End of rule (?<PPR_X_non_reserved_identifier>)

        (?<PPR_X_three_part_list>
            \(  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            \)
        ) # End of rule (?<PPR_X_three_part_list>)

        (?<PPR_X_indirect_obj>
            (?&PerlBareword)
        |
            (?>(?&PerlVariableScalar))
            (?! (?>(?&PerlOWS)) (?> [<\[\{] | -> ) )
        ) # End of rule (?<PPR_X_indirect_obj>)

        (?<PPR_X_quotelike_body>
            (?>(?&PPR_X_quotelike_body_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body>)

        (?<PPR_X_balanced_parens>
            [^)(\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^)(\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens>)

        (?<PPR_X_balanced_curlies>
            [^\}\{\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^\}\{\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies>)

        (?<PPR_X_balanced_squares>
            [^][\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?&PPR_X_balanced_squares)  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^][\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares>)

        (?<PPR_X_balanced_angles>
            [^><\\\n]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^><\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles>)

        (?<PPR_X_balanced_unicode_delims>
            (?============================)* <-- HERE +
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                (?============================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims>)

        (?<PPR_X_regex_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))            (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))            (?= \] )
                |
                    \(  (?>
                            \?{1,2}+ (?= \{ )
                            (?>(?&PerlBlock))
                        |
                            (?! \?{1,2}+ \{ )
                            (?>(?&PPR_X_balanced_parens))
                        )                                       (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))              (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_regex_body_unclosed>)

        (?<PPR_X_quotelike_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))        (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))        (?= \] )
                |
                    \(  (?>(?&PPR_X_balanced_parens))         (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))          (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_quotelike_body_unclosed>)

        (?<PPR_X_quotelike_body_interpolated>
            (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated>)

        (?<PPR_X_regex_body_interpolated>
            (?>(?&PPR_X_regex_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_regex_body_interpolated>)

        (?<PPR_X_balanced_parens_regex_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_regex_interpolated>)

        (?<PPR_X_balanced_curlies_regex_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_regex_interpolated>)

        (?<PPR_X_balanced_squares_regex_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\](|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\](|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_regex_interpolated>)

        (?<PPR_X_balanced_angles_regex_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_regex_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_regex_interpolated>)


        (?<PPR_X_balanced_unicode_delims_regex_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=======================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?========================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlScalarAccessNoSpace)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_regex_interpolated>)


        (?<PPR_X_balanced_parens_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_interpolated>)

        (?<PPR_X_balanced_curlies_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_interpolated>)

        (?<PPR_X_balanced_squares_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\]] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\]] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_interpolated>)

        (?<PPR_X_balanced_unicode_delims_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! \s | (?======================) ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! \s | (?======================) ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_interpolated>)

        (?<PPR_X_balanced_angles_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_interpolated>)

        (?<PPR_X_regex_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#|()] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#|()] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_regex_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s|()-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s|()-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_regex_body_unclosed)
        ) # End of rule (?<PPR_X_regex_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_quotelike_body_unclosed)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_s_e_check>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body_interpolated)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check>)

        (?<PPR_X_quotelike_s_e_check_uninterpolated>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check_uninterpolated>)

        (?<PPR_X_filetest_name>   [ABCMORSTWXbcdefgkloprstuwxz]          )

        (?<PPR_X_digit_seq>               \d++ (?: _?+         \d++ )*+  )
        (?<PPR_X_x_digit_seq>     [\da-fA-F]++ (?: _?+ [\da-fA-F]++ )*+  )
        (?<PPR_X_o_digit_seq>          [0-7]++ (?: _?+      [0-7]++ )*+  )
        (?<PPR_X_b_digit_seq>          [0-1]++ (?: _?+      [0-1]++ )*+  )

        (?<PPR_X_newline_and_heredoc>
            \n (?===================================================================================================)
        ) # End of rule (?<PPR_X_newline_and_heredoc>)
    )
    # END OF GRAMMAR
)/ at (eval 33) line 2198.
t/plugin-sigify.t ............... 
Dubious, test returned 255 (wstat 65280, 0xff00)
No subtests run 
(?============================)* matches null string many times in regex; marked by <-- HERE in m/(?(DEFINE)

(?<PerlUseStatement>(?<PerlWrapperUseStatement_001>(?&PerlBabbleInnerMatch)|(?&PerlStdUseStatement)))
(?<PerlTryCatch>(?<PerlStdTryCatch>try(?&PerlOWS)(?&PerlBlock)(?:(?&PerlOWS)catch(?&PerlOWS)(?&PerlBlock))?+))
(?<PerlStatement>(?<PerlWrapperStatement_001>(?&PerlTryCatch)|(?&PerlStdStatement)))
(?<PerlBabbleInnerMatch>(?<PerlWrapperBabbleInnerMatch_001>((?&PerlStdBabbleInnerMatch))(?================================================================)))
(?<PerlStdBabbleInnerMatch>use\s+Syntax::Keyword::Try.*?;)

) (?^umsx:
    (?(DEFINE)

        (?<PerlEntireDocument>   (?<PerlStdEntireDocument>
            \A
            (?&PerlDocument)
            (?:
                \Z
            |
                (?(?===========================)
                    (?>(?&PerlOWSOrEND))  (?=======)  ([^\n]++)
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlDocument>   (?<PerlStdDocument>
            \x{FEFF}?+                      # Optional BOM marker
            (?&PerlStatementSequence)
            (?&PerlOWSOrEND)
    )) # End of rule

        (?<PerlStatementSequence>   (?<PerlStdStatementSequence>
            (?>(?&PerlPodSequence))
            (?:
                (?&PerlStatement)
                (?&PerlPodSequence)
            )*+
    )) # End of rule

        (?<PerlStatement>   (?<PerlStdStatement>
            (?>
                (?>(?&PerlPodSequence))
                (?: (?>(?&PerlLabel)) (?&PerlOWSOrEND) )?+
                (?>(?&PerlPodSequence))
                (?>
                    (?&PerlKeyword)
                |
                    (?&PerlSubroutineDeclaration)
                |
                    (?&PerlUseStatement)
                |
                    (?&PerlPackageDeclaration)
                |
                    (?&PerlControlBlock)
                |
                    (?&PerlFormat)
                |
                    (?>(?&PerlExpression))          (?>(?&PerlOWS))
                    (?&PerlStatementModifier)?+     (?>(?&PerlOWSOrEND))
                    (?> ; | (?= \} | \z ))
                |
                    (?&PerlBlock)
                |
                    ;
                )

            | # A yada-yada...
                \.\.\. (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just a label...
                (?>(?&PerlLabel)) (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just an empty statement...
                (?>(?&PerlOWS)) ;

            | # An error (report it, if it's the first)...
                (?(?===========================)
                    (?> (?&PerlOWS) )
                    (?! (?: \} | \z ) )
                    (?=========)
                    ( (?&PerlExpression) (?&PerlOWS) [^\n]++ | [^;\}]++ )
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlSubroutineDeclaration>   (?<PerlStdSubroutineDeclaration>
        (?>
            (?: (?> my | our | state ) \b      (?>(?&PerlOWS)) )?+
            sub \b                             (?>(?&PerlOWS))
            (?>(?&PerlOldQualifiedIdentifier))    (?&PerlOWS)
        |
            AUTOLOAD                              (?&PerlOWS)
        |
            DESTROY                               (?&PerlOWS)
        )
        (?:
            # Perl pre 5.028
            (?:
                (?>
                    (?&PerlSignature)    # Parameter list
                |
                    \( [^)]*+ \)         # Prototype (
                )
                (?&PerlOWS)
            )?+
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
        |
            # Perl post 5.028
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
        )
        (?> ; | (?&PerlBlock) )
    )) # End of rule

        (?<PerlSignature>   (?<PerlStdSignature>
            \(
                (?>(?&PerlOWS))
                (?&PerlParameterDeclaration)*+
            \)
    )) # End of rule

        (?<PerlParameterDeclaration>   (?<PerlStdParameterDeclaration>
            (?:
                    \$  (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)?+ (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableScalar) (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)   (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableArray) (?>(?&PerlOWS))
            |
                (?&PerlVariableHash)  (?>(?&PerlOWS))
            )
            (?: , (?>(?&PerlOWS))  |  (?= \) ) )     # (
    )) # End of rule


        (?<PerlUseStatement>   (?<PerlStdUseStatement>
        (?: use | no ) (?>(?&PerlNWS))
        (?>
            (?&PerlVersionNumber)
        |
            (?>(?&PerlQualifiedIdentifier))
            (?: (?>(?&PerlNWS)) (?&PerlVersionNumber)
                (?! (?>(?&PerlOWS)) (?> (?&PerlInfixBinaryOperator) | (?&PerlComma) | \? ) )
            )?+
            (?: (?>(?&PerlNWS)) (?&PerlPodSequence) )?+
            (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        )
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlReturnExpression>   (?<PerlStdReturnExpression>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
    )) # End of rule

        (?<PerlReturnStatement>   (?<PerlStdReturnStatement>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlPackageDeclaration>   (?<PerlStdPackageDeclaration>
        package
            (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
        (?: (?>(?&PerlNWS)) (?&PerlVersionNumber) )?+
            (?>(?&PerlOWSOrEND)) (?> ; | (?&PerlBlock) | (?= \} | \z ))
    )) # End of rule

        (?<PerlExpression>   (?<PerlStdExpression>
                                (?>(?&PerlLowPrecedenceNotExpression))
            (?: (?>(?&PerlOWS)) (?>(?&PerlLowPrecedenceInfixOperator))
                (?>(?&PerlOWS))    (?&PerlLowPrecedenceNotExpression)  )*+
    )) # End of rule

        (?<PerlLowPrecedenceNotExpression>   (?<PerlStdLowPrecedenceNotExpression>
            (?: not \b (?&PerlOWS) )*+  (?&PerlCommaList)
    )) # End of rule

        (?<PerlCommaList>   (?<PerlStdCommaList>
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            (?:
                (?: (?>(?&PerlComma))          (?&PerlOWS)   )++
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            )*+
                (?: (?>(?&PerlComma))          (?&PerlOWSOrEND)   )*+
    )) # End of rule

        (?<PerlAssignment>   (?<PerlStdAssignment>
                                (?>(?&PerlConditionalExpression))
            (?:
                (?>(?&PerlOWS)) (?>(?&PerlAssignmentOperator))
                (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )*+
    )) # End of rule

        (?<PerlScalarExpression>   (?<PerlStdScalarExpression>
        (?<PerlConditionalExpression>   (?<PerlStdConditionalExpression>
            (?>(?&PerlBinaryExpression))
            (?:
                (?>(?&PerlOWS)) \? (?>(?&PerlOWS)) (?>(?&PerlAssignment))
                (?>(?&PerlOWS))  : (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )?+
    )) # End of rule
    )) # End of rule

        (?<PerlBinaryExpression>   (?<PerlStdBinaryExpression>
                                (?>(?&PerlPrefixPostfixTerm))
            (?: (?>(?&PerlOWS)) (?>(?&PerlInfixBinaryOperator))
                (?>(?&PerlOWS))    (?&PerlPrefixPostfixTerm) )*+
    )) # End of rule

        (?<PerlPrefixPostfixTerm>   (?<PerlStdPrefixPostfixTerm>
            (?: (?>(?&PerlPrefixUnaryOperator))  (?&PerlOWS) )*+
            (?>(?&PerlTerm))
            (?: (?>(?&PerlOWS)) (?&PerlPostfixUnaryOperator) )?+
    )) # End of rule

        (?<PerlLvalue>   (?<PerlStdLvalue>
            (?>
                \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier)
            |
                \(                                                                     (?>(?&PerlOWS))
                    (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )      (?>(?&PerlOWS))
                    (?:
                        (?>(?&PerlComma))                                              (?>(?&PerlOWS))
                        (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )  (?>(?&PerlOWS))
                    )*+
                    (?: (?>(?&PerlComma)) (?&PerlOWS) )?+
                \)
            )
    )) # End of rule

        (?<PerlTerm>   (?<PerlStdTerm>
            (?>
                (?&PerlReturnExpression)

            # The remaining alternatives can all take postfix dereferencers...
            | (?:
                    (?= \$ )  (?&PerlScalarAccess)
              |
                    (?= \@ )  (?&PerlArrayAccess)
              |
                    (?=  % )  (?&PerlHashAccess)
              |
                    (?&PerlAnonymousSubroutine)
              |
                    (?>(?&PerlNullaryBuiltinFunction))  (?! (?>(?&PerlOWS)) \( )
              |
                    (?&PerlDoBlock) | (?&PerlEvalBlock)
              |
                    (?&PerlCall)
              |
                    (?&PerlVariableDeclaration)
              |
                    (?&PerlTypeglob)
              |
                    (?>(?&PerlParenthesesList))

                    # Can optionally do a [...] lookup straight after the parens,
                    # followd by any number of other look-ups
                    (?:
                        (?>(?&PerlOWS)) (?&PerlArrayIndexer)
                        (?:
                            (?>(?&PerlOWS))
                            (?>
                                (?&PerlArrayIndexer)
                            |   (?&PerlHashIndexer)
                            |   (?&PerlParenthesesList)
                            )
                        )*+
                    )?+
              |
                    (?&PerlAnonymousArray)
              |
                    (?&PerlAnonymousHash)
              |
                    (?&PerlDiamondOperator)
              |
                    (?&PerlContextualMatch)
              |
                    (?&PerlQuotelikeS)
              |
                    (?&PerlQuotelikeTR)
              |
                    (?&PerlQuotelikeQX)
              |
                    (?&PerlLiteral)
              )

              (?: (?&PerlTermPostfixDereference) )?+
            )
    )) # End of rule

        (?<PerlTermPostfixDereference>   (?<PerlStdTermPostfixDereference>
            # Must have at least one arrowed dereference...
            (?:
                (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?>  (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    (?:
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    )*+

                |   # A method call...
                    (?> (?&PerlQualifiedIdentifier) | (?! \$\#\* ) (?&PerlVariableScalar) )
                    (?: (?>(?&PerlOWS)) (?&PerlParenthesesList) )?+

                |   # An array or hash slice or k/v slice
                    # (provided it's not subsequently dereferenced)
                    [\@%] (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS))  [\@%]?+  [\[\{] )

                |   # An array max-index lookup...
                    \$\#\*

                |   # A scalar-, glob-, or subroutine dereference...
                    [\$*&] \*

                |   # An array dereference (provided it's not subsequently dereferenced)...
                    \@\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\[\@] )

                |   # A hash dereference (provided it's not subsequently dereferenced)...
                    \%\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\{%] )

                |   # A glob lookup...
                    \* (?&PerlHashIndexer)
                )
            )++
    )) # End of rule

        (?<PerlControlBlock>   (?<PerlStdControlBlock>
            (?> # Conditionals...
                (?> if | unless ) \b                 (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))          (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    elsif \b                         (?>(?&PerlOWS))
                    (?>(?&PerlParenthesesList))      (?>(?&PerlOWS))
                    (?&PerlBlock)
                )*+

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    else \b                          (?>(?&PerlOWS))
                    (?&PerlBlock)
                )?+

            |   # Loops...
                (?>
                    for(?:each)?+ \b
                    (?>(?&PerlOWS))
                    (?:
                        (?> # Explicitly aliased iterator variable...
                            (?> \\ (?>(?&PerlOWS))  (?> my | our | state )
                            |                       (?> my | our | state )  (?>(?&PerlOWS)) \\
                            )
                            (?>(?&PerlOWS))
                            (?> (?&PerlVariableScalar)
                            |   (?&PerlVariableArray)
                            |   (?&PerlVariableHash)
                            )
                        |
                            # List of scalar iterator variables...
                            my                                   (?>(?&PerlOWS))
                            \(                                   (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                (?: ,                            (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                )*+
                                (?: ,                            (?>(?&PerlOWS)) )?+
                            \)

                        |
                            # Implicitly aliased iterator variable...
                            (?> (?: my | our | state ) (?>(?&PerlOWS)) )?+
                            (?&PerlVariableScalar)
                        )?+
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlQuotelikeQW) )
                    |
                        (?&PPR_X_three_part_list)
                    )
                |
                    (?> while | until) \b (?>(?&PerlOWS))
                    (?&PerlParenthesesList)
                )

                (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                    (?>(?&PerlOWS))   continue
                    (?>(?&PerlOWS))   (?&PerlBlock)
                )?+

            | # Phasers...
                (?> BEGIN | END | CHECK | INIT | UNITCHECK ) \b   (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Try/catch/finallys...
                (?>(?&PerlTryCatchFinallyBlock))

            | # Defers...
                defer                                     (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Switches...
                (?> given | when ) \b                     (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))               (?>(?&PerlOWS))
                (?&PerlBlock)
            |
                default                                   (?>(?&PerlOWS))
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlFormat>   (?<PerlStdFormat>
            format
            (?: (?>(?&PerlNWS))  (?&PerlQualifiedIdentifier)  )?+
                (?>(?&PerlOWS))  = [^\n]*+
                (?&PPR_X_newline_and_heredoc)
            (?:
                (?! \. \n )
                [^\n\$\@]*+
                (?:
                    (?>
                        (?= \$ (?! \s ) )  (?&PerlScalarAccessNoSpace)
                    |
                        (?= \@ (?! \s ) )  (?&PerlArrayAccessNoSpace)
                    )
                    [^\n\$\@]*+
                )*+
                (?&PPR_X_newline_and_heredoc)
            )*+
            \. (?&PerlEndOfLine)
    )) # End of rule

        (?<PerlStatementModifier>   (?<PerlStdStatementModifier>
            (?> if | for(?:each)?+ | while | unless | until | when )
            \b
            (?>(?&PerlOWS))
            (?&PerlExpression)
    )) # End of rule

        (?<PerlBlock>   (?<PerlStdBlock>
            \{  (?>(?&PerlStatementSequence))  \}
    )) # End of rule

        (?<PerlCall>   (?<PerlStdCall>
            (?>
                [&]                                    (?>(?&PerlOWS))
                (?> (?&PerlBlock)
                |   (?&PerlVariableScalar)
                |   (?&PerlQualifiedIdentifier)
                )                                      (?>(?&PerlOWS))
                (?:
                    \(                                 (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))        (?&PerlOWS)   )?+
                    \)
                )?+
            |
                - (?>(?&PPR_X_filetest_name))            (?>(?&PerlOWS))
                (?&PerlPrefixPostfixTerm)?+
            |
                (?>(?&PerlBuiltinFunction))            (?>(?&PerlOWS))
                (?>
                    \(                                 (?>(?&PerlOWS))
                        (?>
                            (?= (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlExpression)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlExpression)
                        |
                            (?&PerlExpression)?+
                        )                              (?>(?&PerlOWS))
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            |
                (?>(?&PPR_X_non_reserved_identifier)) (?>(?&PerlOWS))
                (?>
                    \(                              (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))     (?&PerlOWS)  )?+
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))           (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))        (?&PerlNWS)
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            )
    )) # End of rule

        (?<PerlVariableDeclaration>   (?<PerlStdVariableDeclaration>
            (?> my | our | state ) \b           (?>(?&PerlOWS))
            (?: (?&PerlQualifiedIdentifier)        (?&PerlOWS)  )?+
            (?>(?&PerlLvalue))                  (?>(?&PerlOWS))
            (?&PerlAttributes)?+
    )) # End of rule

        (?<PerlDoBlock>   (?<PerlStdDoBlock>
            do (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlEvalBlock>   (?<PerlStdEvalBlock>
            eval (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlTryCatchFinallyBlock>   (?<PerlStdTryCatchFinallyBlock>

                try \b                                (?>(?&PerlOWS))
                (?>(?&PerlBlock))
                                                      (?>(?&PerlOWS))
                catch \b                              (?>(?&PerlOWS))
                \(  (?>(?&PerlVariableScalar))  \)    (?>(?&PerlOWS))
                (?>(?&PerlBlock))

            (?:
                                                      (?>(?&PerlOWS))
                finally \b                            (?>(?&PerlOWS))
                (?>(?&PerlBlock))
            )?+
    )) # End of rule

        (?<PerlAttributes>   (?<PerlStdAttributes>
            :
            (?>(?&PerlOWS))
            (?>(?&PerlIdentifier))
            (?:
                (?= \( ) (?&PPR_X_quotelike_body)
            )?+

            (?:
                (?> (?>(?&PerlOWS)) : (?&PerlOWS) | (?&PerlNWS) )
                (?>(?&PerlIdentifier))
                (?:
                    (?= \( ) (?&PPR_X_quotelike_body)
                )?+
            )*+
    )) # End of rule

        (?<PerlList>   (?<PerlStdList>
            (?> (?&PerlParenthesesList) | (?&PerlCommaList) )
    )) # End of rule

        (?<PerlParenthesesList>   (?<PerlStdParenthesesList>
            \(  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \)
    )) # End of rule

        (?<PerlAnonymousArray>   (?<PerlStdAnonymousArray>
            \[  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \]
    )) # End of rule

        (?<PerlAnonymousHash>   (?<PerlStdAnonymousHash>
            \{  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+ \}
    )) # End of rule

        (?<PerlArrayIndexer>   (?<PerlStdArrayIndexer>
            \[                          (?>(?&PerlOWS))
                (?>(?&PerlExpression))  (?>(?&PerlOWS))
            \]
    )) # End of rule

        (?<PerlHashIndexer>   (?<PerlStdHashIndexer>
            \{  (?>(?&PerlOWS))
                (?: -?+ (?&PerlIdentifier) | (?&PerlExpression) )  # (Note: MUST allow backtracking here)
                (?>(?&PerlOWS))
            \}
    )) # End of rule

        (?<PerlDiamondOperator>   (?<PerlStdDiamondOperator>
            <<>>    # Perl 5.22 "double diamond"
        |
            < (?! < )
                (?>(?&PPR_X_balanced_angles))
            >
            (?=
                (?>(?&PerlOWSOrEND))
                (?> \z | [,;\}\])?] | => | : (?! :)        # (
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule

        (?<PerlComma>   (?<PerlStdComma>
            (?> , | => )
    )) # End of rule

        (?<PerlPrefixUnaryOperator>   (?<PerlStdPrefixUnaryOperator>
            (?> \+\+ | -- | [!\\+~] | - (?! (?&PPR_X_filetest_name) \b ) )
    )) # End of rule

        (?<PerlPostfixUnaryOperator>   (?<PerlStdPostfixUnaryOperator>
            (?> \+\+  |  -- )
    )) # End of rule

        (?<PerlInfixBinaryOperator>   (?<PerlStdInfixBinaryOperator>
            (?>  [=!][~=]
            |    cmp
            |    <= >?+
            |    >=
            |    [lg][te]
            |    eq
            |    ne
            |    [+]             (?! [+=] )
            |     -              (?! [-=] )
            |    [.]{2,3}+
            |    [.%x]           (?! [=]  )
            |    [&|^][.]        (?! [=]  )
            |    [<>*&|/]{1,2}+  (?! [=]  )
            |    \^              (?! [=]  )
            |    ~~
            |    isa
            )
    )) # End of rule

        (?<PerlAssignmentOperator>   (?<PerlStdAssignmentOperator>
            (?:  [<>*&|/]{2}
            |  [-+.*/%x]
            |  [&|^][.]?+
            )?+
            =
            (?! > )
    )) # End of rule

        (?<PerlLowPrecedenceInfixOperator>   (?<PerlStdLowPrecedenceInfixOperator>
            (?> or | and | xor )
    )) # End of rule

        (?<PerlAnonymousSubroutine>   (?<PerlStdAnonymousSubroutine>
            sub \b
            (?>(?&PerlOWS))
            (?:
                # Perl pre 5.028
                (?:
                    (?>
                        (?&PerlSignature)    # Parameter list
                    |
                        \( [^)]*+ \)         # Prototype (
                    )
                    (?&PerlOWS)
                )?+
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            |
                # Perl post 5.028
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
                (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
            )
            (?&PerlBlock)
    )) # End of rule

        (?<PerlVariable>   (?<PerlStdVariable>
            (?= [\$\@%] )
            (?>
                (?&PerlScalarAccess)
            |   (?&PerlHashAccess)
            |   (?&PerlArrayAccess)
            )
            (?> (?&PerlTermPostfixDereference) )?+
    )) # End of rule

        (?<PerlTypeglob>   (?<PerlStdTypeglob>
            \*
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier))  (?: :: )?+
            |
                (?&PerlVariableScalar)
            |
                [][!"#\$%&'()*+,./:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccess>   (?<PerlStdArrayAccess>
            (?>(?&PerlVariableArray))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccessNoSpace>   (?<PerlStdArrayAccessNoSpace>
            (?>(?&PerlVariableArrayNoSpace))

            # Optional arrowless access(es) to begin
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any number of optional arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlArrayAccessNoSpaceNoArrow>   (?<PerlStdArrayAccessNoSpaceNoArrow>
            (?>(?&PerlVariableArray))
            (?:
                (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
            )*+
    )) # End of rule

        (?<PerlHashAccess>   (?<PerlStdHashAccess>
            (?>(?&PerlVariableHash))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlScalarAccess>   (?<PerlStdScalarAccess>
            (?>(?&PerlVariableScalar))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlScalarAccessNoSpace>   (?<PerlStdScalarAccessNoSpace>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) to begin...
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any nuber of arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlScalarAccessNoSpaceNoArrow>   (?<PerlStdScalarAccessNoSpaceNoArrow>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) (but parens can't be first)...
            (?:
                (?! \( )
                (?:
                    (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlVariableScalar>   (?<PerlStdVariableScalar>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
                (?&PerlOWS)
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ [!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-] \}
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableScalarNoSpace>   (?<PerlStdVariableScalarNoSpace>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableArray>   (?<PerlStdVariableArray>
            \@     (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableArrayNoSpace>   (?<PerlStdVariableArrayNoSpace>
            \@
            (?: \$ )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableHash>   (?<PerlStdVariableHash>
            %      (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)?+
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlLabel>   (?<PerlStdLabel>
            (?! (?> [msy] | q[wrxq]?+ | tr ) \b )
            (?>(?&PerlIdentifier))
            : (?! : )
    )) # End of rule

        (?<PerlLiteral>   (?<PerlStdLiteral>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlNumber)
            |   (?&PerlBareword)
            )
    )) # End of rule

        (?<PerlString>   (?<PerlStdString>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                (?: q \b | qq (?= (?>(?&PerlOWS)) ' ) )
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            |
                qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            |
                (?&PerlHeredoc)
            |
                (?&PerlVString)
            )
    )) # End of rule

        (?<PerlQuotelike>   (?<PerlStdQuotelike>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlQuotelikeQX)
            |   (?&PerlContextualMatch)
            |   (?&PerlQuotelikeS)
            |   (?&PerlQuotelikeTR)
            )
    )) # End of rule

        (?<PerlHeredoc>   (?<PerlStdHeredoc>
            # Match the introducer...
            <<
            (?<_heredoc_indented> [~]?+ )

            # Match the terminator specification...
            (?>
                \\?+   (?<_heredoc_terminator>  (?&PerlIdentifier)              )
            |
                (?>(?&PerlOWS))
                (?>
                    "  (?<_heredoc_terminator>  [^"\\]*+  (?: \\. [^"\\]*+ )*+  )  "  #"
                |
                    (?<PPR_X_HD_nointerp> ' )
                    (?<_heredoc_terminator>  [^'\\]*+  (?: \\. [^'\\]*+ )*+  )  '  #'
                |
                    `  (?<_heredoc_terminator>  [^`\\]*+  (?: \\. [^`\\]*+ )*+  )  `  #`
                )
            |
                    (?<_heredoc_terminator>                                  )
            )

            # Do we need to reset the heredoc cache???
            (?====================================================================================================================================================================================================================================================================)

            # Do we need to cache content lookahead for this heredoc???
            (?(?==============================================================================================================================================================================)

                # Lookahead to detect and remember trailing contents of heredoc
                (?=
                    [^\n]*+ \n                                   # Go to the end of the current line
                    (?==========)                                # Remember the start of the contents
                    (?==========================================)   # Skip earlier heredoc contents
                    (?>                                          # The heredoc contents consist of...
                        (?:
                            (?!
                                (?(?=========================) \h*+ )   # An indent (if it was a <<~)
                                \g{_heredoc_terminator}                 # The terminator
                                (?: \n | \z )                           # At an end-of-line
                            )
                            (?(<PPR_X_HD_nointerp>)
                                [^\n]*+ \n
                            |
                                [^\n\$\@]*+
                                (?:
                                    (?>
                                        (?===========================================)
                                        (?= \$ )  (?&PerlScalarAccess)
                                        (?===============================)
                                    |
                                        (?===========================================)
                                        (?= \@ )  (?&PerlArrayAccess)
                                        (?===============================)
                                    )
                                    [^\n\$\@]*+
                                )*+
                                \n (?==========================================)
                            )
                        )*+

                        (?(?=========================) \h*+ )            # An indent (if it was a <<~)
                        \g{_heredoc_terminator}                          # The specified terminator
                        (?: \n | \z )                                    # Followed by EOL
                    )

                    # Then memoize the skip for when it's subsequently needed by PerlOWS or PerlNWS...
                    (?===============================================================================================================================================================================================================================================================================================================================================================================)
                )
            )

    )) # End of rule

        (?<PerlQuotelikeQ>   (?<PerlStdQuotelikeQ>
            (?>
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                \b q \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQQ>   (?<PerlStdQuotelikeQQ>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                \b qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            )
    )) # End of rule

        (?<PerlQuotelikeQW>   (?<PerlStdQuotelikeQW>
            (?>
                qw \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQX>   (?<PerlStdQuotelikeQX>
            (?>
                `  [^`]*+  (?: \\. [^`]*+ )*+  `
            |
                qx
                    (?>
                        (?= (?>(?&PerlOWS)) ' )
                        (?&PPR_X_quotelike_body)
                    |
                        \b (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                        (?&PPR_X_quotelike_body_interpolated)
                    )
            )
    )) # End of rule

        (?<PerlQuotelikeS>   (?<PerlStdQuotelikeS>
        (?<PerlSubstitution>   (?<PerlStdSubstitution>
            s \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{]                 # )
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_regex_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Single-quoted syntax...
                (?= (?>(?&PerlOWS)) ' )
                (?>(?&PPR_X_regex_body_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Delimited syntax...
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            )
            [msixpodualgcern]*+
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeTR>   (?<PerlStdQuotelikeTR>
        (?<PerlTransliteration>   (?<PerlStdTransliteration>
            (?> tr | y ) \b
            (?! (?>(?&PerlOWS)) => )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{\«]                 # )]
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_quotelike_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Delimited syntax...
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            )
            [cdsr]*+
    )) # End of rule
    )) # End of rule

        (?<PerlContextualQuotelikeM>   (?<PerlStdContextualQuotelikeM>
        (?<PerlContextualMatch>   (?<PerlStdContextualMatch>
            (?<PerlQuotelikeM>
            (?<PerlMatch>
                (?>
                    \/\/
                |
                    (?>
                        m (?= [#] )
                    |
                        m \b
                        (?! (?>(?&PerlOWS)) => )
                    |
                        (?= \/ [^/] )
                    )
                    (?&PPR_X_regex_body_interpolated)
                )
                [msixpodualgcn]*+
            ) # End of rule (?<PerlMatch>)
            ) # End of rule (?<PerlQuotelikeM>)
            (?=
                (?>(?&PerlOWS))
                (?> \z | [,;\}\])?] | => | : (?! :)
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeQR>   (?<PerlStdQuotelikeQR>
            qr \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>(?&PPR_X_regex_body_interpolated))
            [msixpodualn]*+
    )) # End of rule

        (?<PerlRegex>   (?<PerlStdRegex>
            (?>
                (?&PerlMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule

        (?<PerlContextualRegex>   (?<PerlStdContextualRegex>
            (?>
                (?&PerlContextualMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule


        (?<PerlBuiltinFunction>   (?<PerlStdBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?=[^\W\d]) # Skip if possible
            (?>
                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(?>at|udy)|leep|rand|qrt|ay|in)
                | 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)
                | r(?>e(?>ad(?>lin[ek]|pipe|dir)?|(?>quir|vers|nam)e|winddir|turn|set|cv|do|f)|index|mdir|and)
                | c(?>h(?>o(?>m?p|wn)|r(?>oot)?|dir|mod)|o(?>n(?>tinue|nect)|s)|lose(?>dir)?|aller|rypt)
                | e(?>nd(?>(?>hos|ne)t|p(?>roto|w)|serv|gr)ent|x(?>i(?>sts|t)|ec|p)|ach|val(?>bytes)?+|of)
                | l(?>o(?>c(?>al(?>time)?|k)|g)|i(?>sten|nk)|(?>sta|as)t|c(?>first)?|ength)
                | u(?>n(?>(?>lin|pac)k|shift|def|tie)|c(?>first)?|mask|time)
                | p(?>r(?>ototype|intf?)|ack(?>age)?|o[ps]|ipe|ush)
                | d(?>bm(?>close|open)|e(?>fined|lete)|ump|ie|o)
                | f(?>or(?>m(?>line|at)|k)|ileno|cntl|c|lock)
                | t(?>i(?>mes?|ed?)|ell(?>dir)?|runcate)
                | w(?>a(?>it(?>pid)?|ntarray|rn)|rite)
                | m(?>sg(?>ctl|get|rcv|snd)|kdir|ap)
                | b(?>in(?>mode|d)|less|reak)
                | i(?>n(?>dex|t)|mport|octl)
                | a(?>ccept|larm|tan2|bs)
                | o(?>pen(?>dir)?|ct|rd)
                | v(?>alues|ec)
                | k(?>eys|ill)
                | quotemeta
                | join
                | next
                | hex
                | _
            )
            \b
    )) # End of rule

        (?<PerlNullaryBuiltinFunction>   (?<PerlStdNullaryBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?= [^\W\d] )  # Skip if possible
            (?>
                get(?:(?:(?:hos|ne)t|serv|gr)ent|p(?:(?:roto|w)ent|pid)|login)
                | end(?:(?:hos|ne)t|p(?:roto|w)|serv|gr)ent
                | wa(?:ntarray|it)
                | times?
                | fork
                | _
            )
            \b
    )) # End of rule

        (?<PerlVersionNumber>   (?<PerlStdVersionNumber>
            (?>
                (?&PerlVString)
            |
                (?>(?&PPR_X_digit_seq))
                (?: \. (?&PPR_X_digit_seq)?+ )*+
            )
    )) # End of rule

        (?<PerlVString>   (?<PerlStdVString>
            v  (?>(?&PPR_X_digit_seq))  (?: \. (?&PPR_X_digit_seq) )*+
    )) # End of rule

        (?<PerlNumber>   (?<PerlStdNumber>
            [+-]?+
            (?>
                0  (?>  x   (?&PPR_X_x_digit_seq)
                |       b   (?&PPR_X_b_digit_seq)
                |       o?  (?&PPR_X_o_digit_seq)
                )
            |
                (?>
                        (?>(?&PPR_X_digit_seq))
                    (?: \. (?&PPR_X_digit_seq)?+ )?+
                |
                        \. (?&PPR_X_digit_seq)
                )
                (?: [eE] [+-]?+ (?&PPR_X_digit_seq) )?+
            )
    )) # End of rule

        (?<PerlOldQualifiedIdentifier>   (?<PerlStdOldQualifiedIdentifier>
            (?> (?> :: | ' ) \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlQualifiedIdentifier>   (?<PerlStdQualifiedIdentifier>
            (?>     ::       \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlIdentifier>   (?<PerlStdIdentifier>
                                    [^\W\d]\w*+
    )) # End of rule

        (?<PerlBareword>   (?<PerlStdBareword>
            (?! (?> (?= \w )
                    (?> for(?:each)?+ | while | if      | unless | until | use | no
                    |   given         | when  | sub     | return | my    | our | state
                    |   try           | catch | finally | defer
                    )
                |   (?&PPR_X_named_op)
                |   __ (?> END | DATA ) __ \b
                ) \b
                (?! (?>(?&PerlOWS)) => )
            )
            (?! (?> q[qwrx]?+ | [mys] | tr ) \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            )
            (?: :: )?+
            [^\W\d]\w*+
            (?: (?: :: | ' )  [^\W\d]\w*+  )*+
            (?: :: )?+
            (?! \( )    # )
        |
            :: (?! \w | \{ )
    )) # End of rule

        (?<PerlKeyword>   (?<PerlStdKeyword>
            (?!)    # None, by default, but can be overridden in a composing regex
    )) # End of rule

        (?<PerlPodSequence>   (?<PerlStdPodSequence>
            (?>(?&PerlOWS))  (?: (?>(?&PerlPod))  (?&PerlOWS) )*+
    )) # End of rule

        (?<PerlPod>   (?<PerlStdPod>
            ^ = [^\W\d]\w*+             # A line starting with =<identifier>
            .*?                         # Up to the first...
            (?>
                ^ = cut \b [^\n]*+ $    # ...line starting with =cut
            |                           # or
                \z                      # ...EOF
            )
    )) # End of rule


        ##### Whitespace matching (part of API) #################################

        (?<PerlOWSOrEND>   (?<PerlStdOWSOrEND>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            |
                __ (?> END | DATA ) __ \b .*+ \z
            )*+
    )) # End of rule

        (?<PerlOWS>   (?<PerlStdOWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )*+
    )) # End of rule

        (?<PerlNWS>   (?<PerlStdNWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )++
    )) # End of rule

        (?<PerlEndOfLine>   (?<PerlStdEndOfLine>
            \n
    )) # End of rule


        ###### Internal components (not part of API) ##########################

        (?<PPR_X_named_op>
            (?> cmp
            |   [lg][te]
            |   eq
            |   ne
            |   and
            |   or
            |   xor
            )
        ) # End of rule (?<PPR_X_named_op>)

        (?<PPR_X_non_reserved_identifier>
            (?! (?>
                   for(?:each)?+ | while   | if    | unless | until | given | when | default
                |  sub | format  | use     | no    | my     | our   | state
                |  try | catch   | finally | defer
                |  (?&PPR_X_named_op)
                |  [msy] | q[wrxq]?+ | tr
                |   __ (?> END | DATA ) __
                )
                \b
            )
            (?>(?&PerlQualifiedIdentifier))
            (?! :: )
        ) # End of rule (?<PPR_X_non_reserved_identifier>)

        (?<PPR_X_three_part_list>
            \(  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            \)
        ) # End of rule (?<PPR_X_three_part_list>)

        (?<PPR_X_indirect_obj>
            (?&PerlBareword)
        |
            (?>(?&PerlVariableScalar))
            (?! (?>(?&PerlOWS)) (?> [<\[\{] | -> ) )
        ) # End of rule (?<PPR_X_indirect_obj>)

        (?<PPR_X_quotelike_body>
            (?>(?&PPR_X_quotelike_body_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body>)

        (?<PPR_X_balanced_parens>
            [^)(\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^)(\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens>)

        (?<PPR_X_balanced_curlies>
            [^\}\{\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^\}\{\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies>)

        (?<PPR_X_balanced_squares>
            [^][\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?&PPR_X_balanced_squares)  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^][\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares>)

        (?<PPR_X_balanced_angles>
            [^><\\\n]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^><\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles>)

        (?<PPR_X_balanced_unicode_delims>
            (?============================)* <-- HERE +
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                (?============================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims>)

        (?<PPR_X_regex_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))            (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))            (?= \] )
                |
                    \(  (?>
                            \?{1,2}+ (?= \{ )
                            (?>(?&PerlBlock))
                        |
                            (?! \?{1,2}+ \{ )
                            (?>(?&PPR_X_balanced_parens))
                        )                                       (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))              (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_regex_body_unclosed>)

        (?<PPR_X_quotelike_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))        (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))        (?= \] )
                |
                    \(  (?>(?&PPR_X_balanced_parens))         (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))          (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_quotelike_body_unclosed>)

        (?<PPR_X_quotelike_body_interpolated>
            (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated>)

        (?<PPR_X_regex_body_interpolated>
            (?>(?&PPR_X_regex_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_regex_body_interpolated>)

        (?<PPR_X_balanced_parens_regex_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_regex_interpolated>)

        (?<PPR_X_balanced_curlies_regex_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_regex_interpolated>)

        (?<PPR_X_balanced_squares_regex_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\](|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\](|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_regex_interpolated>)

        (?<PPR_X_balanced_angles_regex_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_regex_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_regex_interpolated>)


        (?<PPR_X_balanced_unicode_delims_regex_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=======================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?========================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlScalarAccessNoSpace)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_regex_interpolated>)


        (?<PPR_X_balanced_parens_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_interpolated>)

        (?<PPR_X_balanced_curlies_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_interpolated>)

        (?<PPR_X_balanced_squares_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\]] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\]] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_interpolated>)

        (?<PPR_X_balanced_unicode_delims_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! \s | (?======================) ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! \s | (?======================) ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_interpolated>)

        (?<PPR_X_balanced_angles_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_interpolated>)

        (?<PPR_X_regex_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#|()] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#|()] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_regex_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s|()-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s|()-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_regex_body_unclosed)
        ) # End of rule (?<PPR_X_regex_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_quotelike_body_unclosed)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_s_e_check>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body_interpolated)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check>)

        (?<PPR_X_quotelike_s_e_check_uninterpolated>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check_uninterpolated>)

        (?<PPR_X_filetest_name>   [ABCMORSTWXbcdefgkloprstuwxz]          )

        (?<PPR_X_digit_seq>               \d++ (?: _?+         \d++ )*+  )
        (?<PPR_X_x_digit_seq>     [\da-fA-F]++ (?: _?+ [\da-fA-F]++ )*+  )
        (?<PPR_X_o_digit_seq>          [0-7]++ (?: _?+      [0-7]++ )*+  )
        (?<PPR_X_b_digit_seq>          [0-1]++ (?: _?+      [0-1]++ )*+  )

        (?<PPR_X_newline_and_heredoc>
            \n (?===================================================================================================)
        ) # End of rule (?<PPR_X_newline_and_heredoc>)
    )
    # END OF GRAMMAR
)/ at (eval 33) line 2200.
t/plugin-skt.t .................. 
Dubious, test returned 255 (wstat 65280, 0xff00)
No subtests run 
(?============================)* matches null string many times in regex; marked by <-- HERE in m/(?(DEFINE)

(?<PerlUseStatement>(?<PerlWrapperUseStatement_001>(?&PerlBabbleInnerMatch)|(?&PerlStdUseStatement)))
(?<PerlBabbleInnerMatch>(?<PerlWrapperBabbleInnerMatch_001>((?&PerlStdBabbleInnerMatch))(?================================================================)))
(?<PerlStdBabbleInnerMatch>use\s+feature\s+.*?;)

) (?^umsx:
    (?(DEFINE)

        (?<PerlEntireDocument>   (?<PerlStdEntireDocument>
            \A
            (?&PerlDocument)
            (?:
                \Z
            |
                (?(?===========================)
                    (?>(?&PerlOWSOrEND))  (?=======)  ([^\n]++)
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlDocument>   (?<PerlStdDocument>
            \x{FEFF}?+                      # Optional BOM marker
            (?&PerlStatementSequence)
            (?&PerlOWSOrEND)
    )) # End of rule

        (?<PerlStatementSequence>   (?<PerlStdStatementSequence>
            (?>(?&PerlPodSequence))
            (?:
                (?&PerlStatement)
                (?&PerlPodSequence)
            )*+
    )) # End of rule

        (?<PerlStatement>   (?<PerlStdStatement>
            (?>
                (?>(?&PerlPodSequence))
                (?: (?>(?&PerlLabel)) (?&PerlOWSOrEND) )?+
                (?>(?&PerlPodSequence))
                (?>
                    (?&PerlKeyword)
                |
                    (?&PerlSubroutineDeclaration)
                |
                    (?&PerlUseStatement)
                |
                    (?&PerlPackageDeclaration)
                |
                    (?&PerlControlBlock)
                |
                    (?&PerlFormat)
                |
                    (?>(?&PerlExpression))          (?>(?&PerlOWS))
                    (?&PerlStatementModifier)?+     (?>(?&PerlOWSOrEND))
                    (?> ; | (?= \} | \z ))
                |
                    (?&PerlBlock)
                |
                    ;
                )

            | # A yada-yada...
                \.\.\. (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just a label...
                (?>(?&PerlLabel)) (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just an empty statement...
                (?>(?&PerlOWS)) ;

            | # An error (report it, if it's the first)...
                (?(?===========================)
                    (?> (?&PerlOWS) )
                    (?! (?: \} | \z ) )
                    (?=========)
                    ( (?&PerlExpression) (?&PerlOWS) [^\n]++ | [^;\}]++ )
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlSubroutineDeclaration>   (?<PerlStdSubroutineDeclaration>
        (?>
            (?: (?> my | our | state ) \b      (?>(?&PerlOWS)) )?+
            sub \b                             (?>(?&PerlOWS))
            (?>(?&PerlOldQualifiedIdentifier))    (?&PerlOWS)
        |
            AUTOLOAD                              (?&PerlOWS)
        |
            DESTROY                               (?&PerlOWS)
        )
        (?:
            # Perl pre 5.028
            (?:
                (?>
                    (?&PerlSignature)    # Parameter list
                |
                    \( [^)]*+ \)         # Prototype (
                )
                (?&PerlOWS)
            )?+
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
        |
            # Perl post 5.028
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
        )
        (?> ; | (?&PerlBlock) )
    )) # End of rule

        (?<PerlSignature>   (?<PerlStdSignature>
            \(
                (?>(?&PerlOWS))
                (?&PerlParameterDeclaration)*+
            \)
    )) # End of rule

        (?<PerlParameterDeclaration>   (?<PerlStdParameterDeclaration>
            (?:
                    \$  (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)?+ (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableScalar) (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)   (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableArray) (?>(?&PerlOWS))
            |
                (?&PerlVariableHash)  (?>(?&PerlOWS))
            )
            (?: , (?>(?&PerlOWS))  |  (?= \) ) )     # (
    )) # End of rule


        (?<PerlUseStatement>   (?<PerlStdUseStatement>
        (?: use | no ) (?>(?&PerlNWS))
        (?>
            (?&PerlVersionNumber)
        |
            (?>(?&PerlQualifiedIdentifier))
            (?: (?>(?&PerlNWS)) (?&PerlVersionNumber)
                (?! (?>(?&PerlOWS)) (?> (?&PerlInfixBinaryOperator) | (?&PerlComma) | \? ) )
            )?+
            (?: (?>(?&PerlNWS)) (?&PerlPodSequence) )?+
            (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        )
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlReturnExpression>   (?<PerlStdReturnExpression>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
    )) # End of rule

        (?<PerlReturnStatement>   (?<PerlStdReturnStatement>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlPackageDeclaration>   (?<PerlStdPackageDeclaration>
        package
            (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
        (?: (?>(?&PerlNWS)) (?&PerlVersionNumber) )?+
            (?>(?&PerlOWSOrEND)) (?> ; | (?&PerlBlock) | (?= \} | \z ))
    )) # End of rule

        (?<PerlExpression>   (?<PerlStdExpression>
                                (?>(?&PerlLowPrecedenceNotExpression))
            (?: (?>(?&PerlOWS)) (?>(?&PerlLowPrecedenceInfixOperator))
                (?>(?&PerlOWS))    (?&PerlLowPrecedenceNotExpression)  )*+
    )) # End of rule

        (?<PerlLowPrecedenceNotExpression>   (?<PerlStdLowPrecedenceNotExpression>
            (?: not \b (?&PerlOWS) )*+  (?&PerlCommaList)
    )) # End of rule

        (?<PerlCommaList>   (?<PerlStdCommaList>
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            (?:
                (?: (?>(?&PerlComma))          (?&PerlOWS)   )++
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            )*+
                (?: (?>(?&PerlComma))          (?&PerlOWSOrEND)   )*+
    )) # End of rule

        (?<PerlAssignment>   (?<PerlStdAssignment>
                                (?>(?&PerlConditionalExpression))
            (?:
                (?>(?&PerlOWS)) (?>(?&PerlAssignmentOperator))
                (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )*+
    )) # End of rule

        (?<PerlScalarExpression>   (?<PerlStdScalarExpression>
        (?<PerlConditionalExpression>   (?<PerlStdConditionalExpression>
            (?>(?&PerlBinaryExpression))
            (?:
                (?>(?&PerlOWS)) \? (?>(?&PerlOWS)) (?>(?&PerlAssignment))
                (?>(?&PerlOWS))  : (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )?+
    )) # End of rule
    )) # End of rule

        (?<PerlBinaryExpression>   (?<PerlStdBinaryExpression>
                                (?>(?&PerlPrefixPostfixTerm))
            (?: (?>(?&PerlOWS)) (?>(?&PerlInfixBinaryOperator))
                (?>(?&PerlOWS))    (?&PerlPrefixPostfixTerm) )*+
    )) # End of rule

        (?<PerlPrefixPostfixTerm>   (?<PerlStdPrefixPostfixTerm>
            (?: (?>(?&PerlPrefixUnaryOperator))  (?&PerlOWS) )*+
            (?>(?&PerlTerm))
            (?: (?>(?&PerlOWS)) (?&PerlPostfixUnaryOperator) )?+
    )) # End of rule

        (?<PerlLvalue>   (?<PerlStdLvalue>
            (?>
                \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier)
            |
                \(                                                                     (?>(?&PerlOWS))
                    (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )      (?>(?&PerlOWS))
                    (?:
                        (?>(?&PerlComma))                                              (?>(?&PerlOWS))
                        (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )  (?>(?&PerlOWS))
                    )*+
                    (?: (?>(?&PerlComma)) (?&PerlOWS) )?+
                \)
            )
    )) # End of rule

        (?<PerlTerm>   (?<PerlStdTerm>
            (?>
                (?&PerlReturnExpression)

            # The remaining alternatives can all take postfix dereferencers...
            | (?:
                    (?= \$ )  (?&PerlScalarAccess)
              |
                    (?= \@ )  (?&PerlArrayAccess)
              |
                    (?=  % )  (?&PerlHashAccess)
              |
                    (?&PerlAnonymousSubroutine)
              |
                    (?>(?&PerlNullaryBuiltinFunction))  (?! (?>(?&PerlOWS)) \( )
              |
                    (?&PerlDoBlock) | (?&PerlEvalBlock)
              |
                    (?&PerlCall)
              |
                    (?&PerlVariableDeclaration)
              |
                    (?&PerlTypeglob)
              |
                    (?>(?&PerlParenthesesList))

                    # Can optionally do a [...] lookup straight after the parens,
                    # followd by any number of other look-ups
                    (?:
                        (?>(?&PerlOWS)) (?&PerlArrayIndexer)
                        (?:
                            (?>(?&PerlOWS))
                            (?>
                                (?&PerlArrayIndexer)
                            |   (?&PerlHashIndexer)
                            |   (?&PerlParenthesesList)
                            )
                        )*+
                    )?+
              |
                    (?&PerlAnonymousArray)
              |
                    (?&PerlAnonymousHash)
              |
                    (?&PerlDiamondOperator)
              |
                    (?&PerlContextualMatch)
              |
                    (?&PerlQuotelikeS)
              |
                    (?&PerlQuotelikeTR)
              |
                    (?&PerlQuotelikeQX)
              |
                    (?&PerlLiteral)
              )

              (?: (?&PerlTermPostfixDereference) )?+
            )
    )) # End of rule

        (?<PerlTermPostfixDereference>   (?<PerlStdTermPostfixDereference>
            # Must have at least one arrowed dereference...
            (?:
                (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?>  (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    (?:
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    )*+

                |   # A method call...
                    (?> (?&PerlQualifiedIdentifier) | (?! \$\#\* ) (?&PerlVariableScalar) )
                    (?: (?>(?&PerlOWS)) (?&PerlParenthesesList) )?+

                |   # An array or hash slice or k/v slice
                    # (provided it's not subsequently dereferenced)
                    [\@%] (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS))  [\@%]?+  [\[\{] )

                |   # An array max-index lookup...
                    \$\#\*

                |   # A scalar-, glob-, or subroutine dereference...
                    [\$*&] \*

                |   # An array dereference (provided it's not subsequently dereferenced)...
                    \@\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\[\@] )

                |   # A hash dereference (provided it's not subsequently dereferenced)...
                    \%\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\{%] )

                |   # A glob lookup...
                    \* (?&PerlHashIndexer)
                )
            )++
    )) # End of rule

        (?<PerlControlBlock>   (?<PerlStdControlBlock>
            (?> # Conditionals...
                (?> if | unless ) \b                 (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))          (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    elsif \b                         (?>(?&PerlOWS))
                    (?>(?&PerlParenthesesList))      (?>(?&PerlOWS))
                    (?&PerlBlock)
                )*+

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    else \b                          (?>(?&PerlOWS))
                    (?&PerlBlock)
                )?+

            |   # Loops...
                (?>
                    for(?:each)?+ \b
                    (?>(?&PerlOWS))
                    (?:
                        (?> # Explicitly aliased iterator variable...
                            (?> \\ (?>(?&PerlOWS))  (?> my | our | state )
                            |                       (?> my | our | state )  (?>(?&PerlOWS)) \\
                            )
                            (?>(?&PerlOWS))
                            (?> (?&PerlVariableScalar)
                            |   (?&PerlVariableArray)
                            |   (?&PerlVariableHash)
                            )
                        |
                            # List of scalar iterator variables...
                            my                                   (?>(?&PerlOWS))
                            \(                                   (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                (?: ,                            (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                )*+
                                (?: ,                            (?>(?&PerlOWS)) )?+
                            \)

                        |
                            # Implicitly aliased iterator variable...
                            (?> (?: my | our | state ) (?>(?&PerlOWS)) )?+
                            (?&PerlVariableScalar)
                        )?+
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlQuotelikeQW) )
                    |
                        (?&PPR_X_three_part_list)
                    )
                |
                    (?> while | until) \b (?>(?&PerlOWS))
                    (?&PerlParenthesesList)
                )

                (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                    (?>(?&PerlOWS))   continue
                    (?>(?&PerlOWS))   (?&PerlBlock)
                )?+

            | # Phasers...
                (?> BEGIN | END | CHECK | INIT | UNITCHECK ) \b   (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Try/catch/finallys...
                (?>(?&PerlTryCatchFinallyBlock))

            | # Defers...
                defer                                     (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Switches...
                (?> given | when ) \b                     (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))               (?>(?&PerlOWS))
                (?&PerlBlock)
            |
                default                                   (?>(?&PerlOWS))
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlFormat>   (?<PerlStdFormat>
            format
            (?: (?>(?&PerlNWS))  (?&PerlQualifiedIdentifier)  )?+
                (?>(?&PerlOWS))  = [^\n]*+
                (?&PPR_X_newline_and_heredoc)
            (?:
                (?! \. \n )
                [^\n\$\@]*+
                (?:
                    (?>
                        (?= \$ (?! \s ) )  (?&PerlScalarAccessNoSpace)
                    |
                        (?= \@ (?! \s ) )  (?&PerlArrayAccessNoSpace)
                    )
                    [^\n\$\@]*+
                )*+
                (?&PPR_X_newline_and_heredoc)
            )*+
            \. (?&PerlEndOfLine)
    )) # End of rule

        (?<PerlStatementModifier>   (?<PerlStdStatementModifier>
            (?> if | for(?:each)?+ | while | unless | until | when )
            \b
            (?>(?&PerlOWS))
            (?&PerlExpression)
    )) # End of rule

        (?<PerlBlock>   (?<PerlStdBlock>
            \{  (?>(?&PerlStatementSequence))  \}
    )) # End of rule

        (?<PerlCall>   (?<PerlStdCall>
            (?>
                [&]                                    (?>(?&PerlOWS))
                (?> (?&PerlBlock)
                |   (?&PerlVariableScalar)
                |   (?&PerlQualifiedIdentifier)
                )                                      (?>(?&PerlOWS))
                (?:
                    \(                                 (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))        (?&PerlOWS)   )?+
                    \)
                )?+
            |
                - (?>(?&PPR_X_filetest_name))            (?>(?&PerlOWS))
                (?&PerlPrefixPostfixTerm)?+
            |
                (?>(?&PerlBuiltinFunction))            (?>(?&PerlOWS))
                (?>
                    \(                                 (?>(?&PerlOWS))
                        (?>
                            (?= (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlExpression)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlExpression)
                        |
                            (?&PerlExpression)?+
                        )                              (?>(?&PerlOWS))
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            |
                (?>(?&PPR_X_non_reserved_identifier)) (?>(?&PerlOWS))
                (?>
                    \(                              (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))     (?&PerlOWS)  )?+
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))           (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))        (?&PerlNWS)
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            )
    )) # End of rule

        (?<PerlVariableDeclaration>   (?<PerlStdVariableDeclaration>
            (?> my | our | state ) \b           (?>(?&PerlOWS))
            (?: (?&PerlQualifiedIdentifier)        (?&PerlOWS)  )?+
            (?>(?&PerlLvalue))                  (?>(?&PerlOWS))
            (?&PerlAttributes)?+
    )) # End of rule

        (?<PerlDoBlock>   (?<PerlStdDoBlock>
            do (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlEvalBlock>   (?<PerlStdEvalBlock>
            eval (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlTryCatchFinallyBlock>   (?<PerlStdTryCatchFinallyBlock>

                try \b                                (?>(?&PerlOWS))
                (?>(?&PerlBlock))
                                                      (?>(?&PerlOWS))
                catch \b                              (?>(?&PerlOWS))
                \(  (?>(?&PerlVariableScalar))  \)    (?>(?&PerlOWS))
                (?>(?&PerlBlock))

            (?:
                                                      (?>(?&PerlOWS))
                finally \b                            (?>(?&PerlOWS))
                (?>(?&PerlBlock))
            )?+
    )) # End of rule

        (?<PerlAttributes>   (?<PerlStdAttributes>
            :
            (?>(?&PerlOWS))
            (?>(?&PerlIdentifier))
            (?:
                (?= \( ) (?&PPR_X_quotelike_body)
            )?+

            (?:
                (?> (?>(?&PerlOWS)) : (?&PerlOWS) | (?&PerlNWS) )
                (?>(?&PerlIdentifier))
                (?:
                    (?= \( ) (?&PPR_X_quotelike_body)
                )?+
            )*+
    )) # End of rule

        (?<PerlList>   (?<PerlStdList>
            (?> (?&PerlParenthesesList) | (?&PerlCommaList) )
    )) # End of rule

        (?<PerlParenthesesList>   (?<PerlStdParenthesesList>
            \(  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \)
    )) # End of rule

        (?<PerlAnonymousArray>   (?<PerlStdAnonymousArray>
            \[  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \]
    )) # End of rule

        (?<PerlAnonymousHash>   (?<PerlStdAnonymousHash>
            \{  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+ \}
    )) # End of rule

        (?<PerlArrayIndexer>   (?<PerlStdArrayIndexer>
            \[                          (?>(?&PerlOWS))
                (?>(?&PerlExpression))  (?>(?&PerlOWS))
            \]
    )) # End of rule

        (?<PerlHashIndexer>   (?<PerlStdHashIndexer>
            \{  (?>(?&PerlOWS))
                (?: -?+ (?&PerlIdentifier) | (?&PerlExpression) )  # (Note: MUST allow backtracking here)
                (?>(?&PerlOWS))
            \}
    )) # End of rule

        (?<PerlDiamondOperator>   (?<PerlStdDiamondOperator>
            <<>>    # Perl 5.22 "double diamond"
        |
            < (?! < )
                (?>(?&PPR_X_balanced_angles))
            >
            (?=
                (?>(?&PerlOWSOrEND))
                (?> \z | [,;\}\])?] | => | : (?! :)        # (
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule

        (?<PerlComma>   (?<PerlStdComma>
            (?> , | => )
    )) # End of rule

        (?<PerlPrefixUnaryOperator>   (?<PerlStdPrefixUnaryOperator>
            (?> \+\+ | -- | [!\\+~] | - (?! (?&PPR_X_filetest_name) \b ) )
    )) # End of rule

        (?<PerlPostfixUnaryOperator>   (?<PerlStdPostfixUnaryOperator>
            (?> \+\+  |  -- )
    )) # End of rule

        (?<PerlInfixBinaryOperator>   (?<PerlStdInfixBinaryOperator>
            (?>  [=!][~=]
            |    cmp
            |    <= >?+
            |    >=
            |    [lg][te]
            |    eq
            |    ne
            |    [+]             (?! [+=] )
            |     -              (?! [-=] )
            |    [.]{2,3}+
            |    [.%x]           (?! [=]  )
            |    [&|^][.]        (?! [=]  )
            |    [<>*&|/]{1,2}+  (?! [=]  )
            |    \^              (?! [=]  )
            |    ~~
            |    isa
            )
    )) # End of rule

        (?<PerlAssignmentOperator>   (?<PerlStdAssignmentOperator>
            (?:  [<>*&|/]{2}
            |  [-+.*/%x]
            |  [&|^][.]?+
            )?+
            =
            (?! > )
    )) # End of rule

        (?<PerlLowPrecedenceInfixOperator>   (?<PerlStdLowPrecedenceInfixOperator>
            (?> or | and | xor )
    )) # End of rule

        (?<PerlAnonymousSubroutine>   (?<PerlStdAnonymousSubroutine>
            sub \b
            (?>(?&PerlOWS))
            (?:
                # Perl pre 5.028
                (?:
                    (?>
                        (?&PerlSignature)    # Parameter list
                    |
                        \( [^)]*+ \)         # Prototype (
                    )
                    (?&PerlOWS)
                )?+
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            |
                # Perl post 5.028
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
                (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
            )
            (?&PerlBlock)
    )) # End of rule

        (?<PerlVariable>   (?<PerlStdVariable>
            (?= [\$\@%] )
            (?>
                (?&PerlScalarAccess)
            |   (?&PerlHashAccess)
            |   (?&PerlArrayAccess)
            )
            (?> (?&PerlTermPostfixDereference) )?+
    )) # End of rule

        (?<PerlTypeglob>   (?<PerlStdTypeglob>
            \*
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier))  (?: :: )?+
            |
                (?&PerlVariableScalar)
            |
                [][!"#\$%&'()*+,./:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccess>   (?<PerlStdArrayAccess>
            (?>(?&PerlVariableArray))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccessNoSpace>   (?<PerlStdArrayAccessNoSpace>
            (?>(?&PerlVariableArrayNoSpace))

            # Optional arrowless access(es) to begin
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any number of optional arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlArrayAccessNoSpaceNoArrow>   (?<PerlStdArrayAccessNoSpaceNoArrow>
            (?>(?&PerlVariableArray))
            (?:
                (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
            )*+
    )) # End of rule

        (?<PerlHashAccess>   (?<PerlStdHashAccess>
            (?>(?&PerlVariableHash))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlScalarAccess>   (?<PerlStdScalarAccess>
            (?>(?&PerlVariableScalar))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlScalarAccessNoSpace>   (?<PerlStdScalarAccessNoSpace>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) to begin...
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any nuber of arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlScalarAccessNoSpaceNoArrow>   (?<PerlStdScalarAccessNoSpaceNoArrow>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) (but parens can't be first)...
            (?:
                (?! \( )
                (?:
                    (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlVariableScalar>   (?<PerlStdVariableScalar>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
                (?&PerlOWS)
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ [!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-] \}
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableScalarNoSpace>   (?<PerlStdVariableScalarNoSpace>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableArray>   (?<PerlStdVariableArray>
            \@     (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableArrayNoSpace>   (?<PerlStdVariableArrayNoSpace>
            \@
            (?: \$ )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableHash>   (?<PerlStdVariableHash>
            %      (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)?+
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlLabel>   (?<PerlStdLabel>
            (?! (?> [msy] | q[wrxq]?+ | tr ) \b )
            (?>(?&PerlIdentifier))
            : (?! : )
    )) # End of rule

        (?<PerlLiteral>   (?<PerlStdLiteral>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlNumber)
            |   (?&PerlBareword)
            )
    )) # End of rule

        (?<PerlString>   (?<PerlStdString>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                (?: q \b | qq (?= (?>(?&PerlOWS)) ' ) )
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            |
                qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            |
                (?&PerlHeredoc)
            |
                (?&PerlVString)
            )
    )) # End of rule

        (?<PerlQuotelike>   (?<PerlStdQuotelike>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlQuotelikeQX)
            |   (?&PerlContextualMatch)
            |   (?&PerlQuotelikeS)
            |   (?&PerlQuotelikeTR)
            )
    )) # End of rule

        (?<PerlHeredoc>   (?<PerlStdHeredoc>
            # Match the introducer...
            <<
            (?<_heredoc_indented> [~]?+ )

            # Match the terminator specification...
            (?>
                \\?+   (?<_heredoc_terminator>  (?&PerlIdentifier)              )
            |
                (?>(?&PerlOWS))
                (?>
                    "  (?<_heredoc_terminator>  [^"\\]*+  (?: \\. [^"\\]*+ )*+  )  "  #"
                |
                    (?<PPR_X_HD_nointerp> ' )
                    (?<_heredoc_terminator>  [^'\\]*+  (?: \\. [^'\\]*+ )*+  )  '  #'
                |
                    `  (?<_heredoc_terminator>  [^`\\]*+  (?: \\. [^`\\]*+ )*+  )  `  #`
                )
            |
                    (?<_heredoc_terminator>                                  )
            )

            # Do we need to reset the heredoc cache???
            (?====================================================================================================================================================================================================================================================================)

            # Do we need to cache content lookahead for this heredoc???
            (?(?==============================================================================================================================================================================)

                # Lookahead to detect and remember trailing contents of heredoc
                (?=
                    [^\n]*+ \n                                   # Go to the end of the current line
                    (?==========)                                # Remember the start of the contents
                    (?==========================================)   # Skip earlier heredoc contents
                    (?>                                          # The heredoc contents consist of...
                        (?:
                            (?!
                                (?(?=========================) \h*+ )   # An indent (if it was a <<~)
                                \g{_heredoc_terminator}                 # The terminator
                                (?: \n | \z )                           # At an end-of-line
                            )
                            (?(<PPR_X_HD_nointerp>)
                                [^\n]*+ \n
                            |
                                [^\n\$\@]*+
                                (?:
                                    (?>
                                        (?===========================================)
                                        (?= \$ )  (?&PerlScalarAccess)
                                        (?===============================)
                                    |
                                        (?===========================================)
                                        (?= \@ )  (?&PerlArrayAccess)
                                        (?===============================)
                                    )
                                    [^\n\$\@]*+
                                )*+
                                \n (?==========================================)
                            )
                        )*+

                        (?(?=========================) \h*+ )            # An indent (if it was a <<~)
                        \g{_heredoc_terminator}                          # The specified terminator
                        (?: \n | \z )                                    # Followed by EOL
                    )

                    # Then memoize the skip for when it's subsequently needed by PerlOWS or PerlNWS...
                    (?===============================================================================================================================================================================================================================================================================================================================================================================)
                )
            )

    )) # End of rule

        (?<PerlQuotelikeQ>   (?<PerlStdQuotelikeQ>
            (?>
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                \b q \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQQ>   (?<PerlStdQuotelikeQQ>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                \b qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            )
    )) # End of rule

        (?<PerlQuotelikeQW>   (?<PerlStdQuotelikeQW>
            (?>
                qw \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQX>   (?<PerlStdQuotelikeQX>
            (?>
                `  [^`]*+  (?: \\. [^`]*+ )*+  `
            |
                qx
                    (?>
                        (?= (?>(?&PerlOWS)) ' )
                        (?&PPR_X_quotelike_body)
                    |
                        \b (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                        (?&PPR_X_quotelike_body_interpolated)
                    )
            )
    )) # End of rule

        (?<PerlQuotelikeS>   (?<PerlStdQuotelikeS>
        (?<PerlSubstitution>   (?<PerlStdSubstitution>
            s \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{]                 # )
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_regex_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Single-quoted syntax...
                (?= (?>(?&PerlOWS)) ' )
                (?>(?&PPR_X_regex_body_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Delimited syntax...
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            )
            [msixpodualgcern]*+
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeTR>   (?<PerlStdQuotelikeTR>
        (?<PerlTransliteration>   (?<PerlStdTransliteration>
            (?> tr | y ) \b
            (?! (?>(?&PerlOWS)) => )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{\«]                 # )]
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_quotelike_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Delimited syntax...
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            )
            [cdsr]*+
    )) # End of rule
    )) # End of rule

        (?<PerlContextualQuotelikeM>   (?<PerlStdContextualQuotelikeM>
        (?<PerlContextualMatch>   (?<PerlStdContextualMatch>
            (?<PerlQuotelikeM>
            (?<PerlMatch>
                (?>
                    \/\/
                |
                    (?>
                        m (?= [#] )
                    |
                        m \b
                        (?! (?>(?&PerlOWS)) => )
                    |
                        (?= \/ [^/] )
                    )
                    (?&PPR_X_regex_body_interpolated)
                )
                [msixpodualgcn]*+
            ) # End of rule (?<PerlMatch>)
            ) # End of rule (?<PerlQuotelikeM>)
            (?=
                (?>(?&PerlOWS))
                (?> \z | [,;\}\])?] | => | : (?! :)
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeQR>   (?<PerlStdQuotelikeQR>
            qr \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>(?&PPR_X_regex_body_interpolated))
            [msixpodualn]*+
    )) # End of rule

        (?<PerlRegex>   (?<PerlStdRegex>
            (?>
                (?&PerlMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule

        (?<PerlContextualRegex>   (?<PerlStdContextualRegex>
            (?>
                (?&PerlContextualMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule


        (?<PerlBuiltinFunction>   (?<PerlStdBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?=[^\W\d]) # Skip if possible
            (?>
                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(?>at|udy)|leep|rand|qrt|ay|in)
                | 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)
                | r(?>e(?>ad(?>lin[ek]|pipe|dir)?|(?>quir|vers|nam)e|winddir|turn|set|cv|do|f)|index|mdir|and)
                | c(?>h(?>o(?>m?p|wn)|r(?>oot)?|dir|mod)|o(?>n(?>tinue|nect)|s)|lose(?>dir)?|aller|rypt)
                | e(?>nd(?>(?>hos|ne)t|p(?>roto|w)|serv|gr)ent|x(?>i(?>sts|t)|ec|p)|ach|val(?>bytes)?+|of)
                | l(?>o(?>c(?>al(?>time)?|k)|g)|i(?>sten|nk)|(?>sta|as)t|c(?>first)?|ength)
                | u(?>n(?>(?>lin|pac)k|shift|def|tie)|c(?>first)?|mask|time)
                | p(?>r(?>ototype|intf?)|ack(?>age)?|o[ps]|ipe|ush)
                | d(?>bm(?>close|open)|e(?>fined|lete)|ump|ie|o)
                | f(?>or(?>m(?>line|at)|k)|ileno|cntl|c|lock)
                | t(?>i(?>mes?|ed?)|ell(?>dir)?|runcate)
                | w(?>a(?>it(?>pid)?|ntarray|rn)|rite)
                | m(?>sg(?>ctl|get|rcv|snd)|kdir|ap)
                | b(?>in(?>mode|d)|less|reak)
                | i(?>n(?>dex|t)|mport|octl)
                | a(?>ccept|larm|tan2|bs)
                | o(?>pen(?>dir)?|ct|rd)
                | v(?>alues|ec)
                | k(?>eys|ill)
                | quotemeta
                | join
                | next
                | hex
                | _
            )
            \b
    )) # End of rule

        (?<PerlNullaryBuiltinFunction>   (?<PerlStdNullaryBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?= [^\W\d] )  # Skip if possible
            (?>
                get(?:(?:(?:hos|ne)t|serv|gr)ent|p(?:(?:roto|w)ent|pid)|login)
                | end(?:(?:hos|ne)t|p(?:roto|w)|serv|gr)ent
                | wa(?:ntarray|it)
                | times?
                | fork
                | _
            )
            \b
    )) # End of rule

        (?<PerlVersionNumber>   (?<PerlStdVersionNumber>
            (?>
                (?&PerlVString)
            |
                (?>(?&PPR_X_digit_seq))
                (?: \. (?&PPR_X_digit_seq)?+ )*+
            )
    )) # End of rule

        (?<PerlVString>   (?<PerlStdVString>
            v  (?>(?&PPR_X_digit_seq))  (?: \. (?&PPR_X_digit_seq) )*+
    )) # End of rule

        (?<PerlNumber>   (?<PerlStdNumber>
            [+-]?+
            (?>
                0  (?>  x   (?&PPR_X_x_digit_seq)
                |       b   (?&PPR_X_b_digit_seq)
                |       o?  (?&PPR_X_o_digit_seq)
                )
            |
                (?>
                        (?>(?&PPR_X_digit_seq))
                    (?: \. (?&PPR_X_digit_seq)?+ )?+
                |
                        \. (?&PPR_X_digit_seq)
                )
                (?: [eE] [+-]?+ (?&PPR_X_digit_seq) )?+
            )
    )) # End of rule

        (?<PerlOldQualifiedIdentifier>   (?<PerlStdOldQualifiedIdentifier>
            (?> (?> :: | ' ) \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlQualifiedIdentifier>   (?<PerlStdQualifiedIdentifier>
            (?>     ::       \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlIdentifier>   (?<PerlStdIdentifier>
                                    [^\W\d]\w*+
    )) # End of rule

        (?<PerlBareword>   (?<PerlStdBareword>
            (?! (?> (?= \w )
                    (?> for(?:each)?+ | while | if      | unless | until | use | no
                    |   given         | when  | sub     | return | my    | our | state
                    |   try           | catch | finally | defer
                    )
                |   (?&PPR_X_named_op)
                |   __ (?> END | DATA ) __ \b
                ) \b
                (?! (?>(?&PerlOWS)) => )
            )
            (?! (?> q[qwrx]?+ | [mys] | tr ) \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            )
            (?: :: )?+
            [^\W\d]\w*+
            (?: (?: :: | ' )  [^\W\d]\w*+  )*+
            (?: :: )?+
            (?! \( )    # )
        |
            :: (?! \w | \{ )
    )) # End of rule

        (?<PerlKeyword>   (?<PerlStdKeyword>
            (?!)    # None, by default, but can be overridden in a composing regex
    )) # End of rule

        (?<PerlPodSequence>   (?<PerlStdPodSequence>
            (?>(?&PerlOWS))  (?: (?>(?&PerlPod))  (?&PerlOWS) )*+
    )) # End of rule

        (?<PerlPod>   (?<PerlStdPod>
            ^ = [^\W\d]\w*+             # A line starting with =<identifier>
            .*?                         # Up to the first...
            (?>
                ^ = cut \b [^\n]*+ $    # ...line starting with =cut
            |                           # or
                \z                      # ...EOF
            )
    )) # End of rule


        ##### Whitespace matching (part of API) #################################

        (?<PerlOWSOrEND>   (?<PerlStdOWSOrEND>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            |
                __ (?> END | DATA ) __ \b .*+ \z
            )*+
    )) # End of rule

        (?<PerlOWS>   (?<PerlStdOWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )*+
    )) # End of rule

        (?<PerlNWS>   (?<PerlStdNWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )++
    )) # End of rule

        (?<PerlEndOfLine>   (?<PerlStdEndOfLine>
            \n
    )) # End of rule


        ###### Internal components (not part of API) ##########################

        (?<PPR_X_named_op>
            (?> cmp
            |   [lg][te]
            |   eq
            |   ne
            |   and
            |   or
            |   xor
            )
        ) # End of rule (?<PPR_X_named_op>)

        (?<PPR_X_non_reserved_identifier>
            (?! (?>
                   for(?:each)?+ | while   | if    | unless | until | given | when | default
                |  sub | format  | use     | no    | my     | our   | state
                |  try | catch   | finally | defer
                |  (?&PPR_X_named_op)
                |  [msy] | q[wrxq]?+ | tr
                |   __ (?> END | DATA ) __
                )
                \b
            )
            (?>(?&PerlQualifiedIdentifier))
            (?! :: )
        ) # End of rule (?<PPR_X_non_reserved_identifier>)

        (?<PPR_X_three_part_list>
            \(  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            \)
        ) # End of rule (?<PPR_X_three_part_list>)

        (?<PPR_X_indirect_obj>
            (?&PerlBareword)
        |
            (?>(?&PerlVariableScalar))
            (?! (?>(?&PerlOWS)) (?> [<\[\{] | -> ) )
        ) # End of rule (?<PPR_X_indirect_obj>)

        (?<PPR_X_quotelike_body>
            (?>(?&PPR_X_quotelike_body_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body>)

        (?<PPR_X_balanced_parens>
            [^)(\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^)(\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens>)

        (?<PPR_X_balanced_curlies>
            [^\}\{\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^\}\{\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies>)

        (?<PPR_X_balanced_squares>
            [^][\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?&PPR_X_balanced_squares)  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^][\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares>)

        (?<PPR_X_balanced_angles>
            [^><\\\n]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^><\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles>)

        (?<PPR_X_balanced_unicode_delims>
            (?============================)* <-- HERE +
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                (?============================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims>)

        (?<PPR_X_regex_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))            (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))            (?= \] )
                |
                    \(  (?>
                            \?{1,2}+ (?= \{ )
                            (?>(?&PerlBlock))
                        |
                            (?! \?{1,2}+ \{ )
                            (?>(?&PPR_X_balanced_parens))
                        )                                       (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))              (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_regex_body_unclosed>)

        (?<PPR_X_quotelike_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))        (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))        (?= \] )
                |
                    \(  (?>(?&PPR_X_balanced_parens))         (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))          (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_quotelike_body_unclosed>)

        (?<PPR_X_quotelike_body_interpolated>
            (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated>)

        (?<PPR_X_regex_body_interpolated>
            (?>(?&PPR_X_regex_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_regex_body_interpolated>)

        (?<PPR_X_balanced_parens_regex_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_regex_interpolated>)

        (?<PPR_X_balanced_curlies_regex_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_regex_interpolated>)

        (?<PPR_X_balanced_squares_regex_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\](|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\](|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_regex_interpolated>)

        (?<PPR_X_balanced_angles_regex_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_regex_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_regex_interpolated>)


        (?<PPR_X_balanced_unicode_delims_regex_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=======================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?========================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlScalarAccessNoSpace)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_regex_interpolated>)


        (?<PPR_X_balanced_parens_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_interpolated>)

        (?<PPR_X_balanced_curlies_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_interpolated>)

        (?<PPR_X_balanced_squares_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\]] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\]] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_interpolated>)

        (?<PPR_X_balanced_unicode_delims_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! \s | (?======================) ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! \s | (?======================) ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_interpolated>)

        (?<PPR_X_balanced_angles_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_interpolated>)

        (?<PPR_X_regex_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#|()] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#|()] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_regex_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s|()-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s|()-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_regex_body_unclosed)
        ) # End of rule (?<PPR_X_regex_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_quotelike_body_unclosed)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_s_e_check>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body_interpolated)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check>)

        (?<PPR_X_quotelike_s_e_check_uninterpolated>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check_uninterpolated>)

        (?<PPR_X_filetest_name>   [ABCMORSTWXbcdefgkloprstuwxz]          )

        (?<PPR_X_digit_seq>               \d++ (?: _?+         \d++ )*+  )
        (?<PPR_X_x_digit_seq>     [\da-fA-F]++ (?: _?+ [\da-fA-F]++ )*+  )
        (?<PPR_X_o_digit_seq>          [0-7]++ (?: _?+      [0-7]++ )*+  )
        (?<PPR_X_b_digit_seq>          [0-1]++ (?: _?+      [0-1]++ )*+  )

        (?<PPR_X_newline_and_heredoc>
            \n (?===================================================================================================)
        ) # End of rule (?<PPR_X_newline_and_heredoc>)
    )
    # END OF GRAMMAR
)/ at (eval 33) line 2198.
t/plugin-state.t ................ 
Dubious, test returned 255 (wstat 65280, 0xff00)
No subtests run 
(?============================)* matches null string many times in regex; marked by <-- HERE in m/(?(DEFINE)

(?<PerlExpression>(?<PerlWrapperExpression_001>(?&PerlBabbleInnerMatch)|(?&PerlStdExpression)))
(?<PerlBabbleInnerMatch>(?<PerlWrapperBabbleInnerMatch_001>((?&PerlStdBabbleInnerMatch))(?================================================================)))
(?<PerlStdBabbleInnerMatch>(?>
                      (?&PerlSubstitution)
                    | (?&PerlTransliteration)
                  ))

) (?^umsx:
    (?(DEFINE)

        (?<PerlEntireDocument>   (?<PerlStdEntireDocument>
            \A
            (?&PerlDocument)
            (?:
                \Z
            |
                (?(?===========================)
                    (?>(?&PerlOWSOrEND))  (?=======)  ([^\n]++)
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlDocument>   (?<PerlStdDocument>
            \x{FEFF}?+                      # Optional BOM marker
            (?&PerlStatementSequence)
            (?&PerlOWSOrEND)
    )) # End of rule

        (?<PerlStatementSequence>   (?<PerlStdStatementSequence>
            (?>(?&PerlPodSequence))
            (?:
                (?&PerlStatement)
                (?&PerlPodSequence)
            )*+
    )) # End of rule

        (?<PerlStatement>   (?<PerlStdStatement>
            (?>
                (?>(?&PerlPodSequence))
                (?: (?>(?&PerlLabel)) (?&PerlOWSOrEND) )?+
                (?>(?&PerlPodSequence))
                (?>
                    (?&PerlKeyword)
                |
                    (?&PerlSubroutineDeclaration)
                |
                    (?&PerlUseStatement)
                |
                    (?&PerlPackageDeclaration)
                |
                    (?&PerlControlBlock)
                |
                    (?&PerlFormat)
                |
                    (?>(?&PerlExpression))          (?>(?&PerlOWS))
                    (?&PerlStatementModifier)?+     (?>(?&PerlOWSOrEND))
                    (?> ; | (?= \} | \z ))
                |
                    (?&PerlBlock)
                |
                    ;
                )

            | # A yada-yada...
                \.\.\. (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just a label...
                (?>(?&PerlLabel)) (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just an empty statement...
                (?>(?&PerlOWS)) ;

            | # An error (report it, if it's the first)...
                (?(?===========================)
                    (?> (?&PerlOWS) )
                    (?! (?: \} | \z ) )
                    (?=========)
                    ( (?&PerlExpression) (?&PerlOWS) [^\n]++ | [^;\}]++ )
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlSubroutineDeclaration>   (?<PerlStdSubroutineDeclaration>
        (?>
            (?: (?> my | our | state ) \b      (?>(?&PerlOWS)) )?+
            sub \b                             (?>(?&PerlOWS))
            (?>(?&PerlOldQualifiedIdentifier))    (?&PerlOWS)
        |
            AUTOLOAD                              (?&PerlOWS)
        |
            DESTROY                               (?&PerlOWS)
        )
        (?:
            # Perl pre 5.028
            (?:
                (?>
                    (?&PerlSignature)    # Parameter list
                |
                    \( [^)]*+ \)         # Prototype (
                )
                (?&PerlOWS)
            )?+
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
        |
            # Perl post 5.028
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
        )
        (?> ; | (?&PerlBlock) )
    )) # End of rule

        (?<PerlSignature>   (?<PerlStdSignature>
            \(
                (?>(?&PerlOWS))
                (?&PerlParameterDeclaration)*+
            \)
    )) # End of rule

        (?<PerlParameterDeclaration>   (?<PerlStdParameterDeclaration>
            (?:
                    \$  (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)?+ (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableScalar) (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)   (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableArray) (?>(?&PerlOWS))
            |
                (?&PerlVariableHash)  (?>(?&PerlOWS))
            )
            (?: , (?>(?&PerlOWS))  |  (?= \) ) )     # (
    )) # End of rule


        (?<PerlUseStatement>   (?<PerlStdUseStatement>
        (?: use | no ) (?>(?&PerlNWS))
        (?>
            (?&PerlVersionNumber)
        |
            (?>(?&PerlQualifiedIdentifier))
            (?: (?>(?&PerlNWS)) (?&PerlVersionNumber)
                (?! (?>(?&PerlOWS)) (?> (?&PerlInfixBinaryOperator) | (?&PerlComma) | \? ) )
            )?+
            (?: (?>(?&PerlNWS)) (?&PerlPodSequence) )?+
            (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        )
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlReturnExpression>   (?<PerlStdReturnExpression>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
    )) # End of rule

        (?<PerlReturnStatement>   (?<PerlStdReturnStatement>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlPackageDeclaration>   (?<PerlStdPackageDeclaration>
        package
            (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
        (?: (?>(?&PerlNWS)) (?&PerlVersionNumber) )?+
            (?>(?&PerlOWSOrEND)) (?> ; | (?&PerlBlock) | (?= \} | \z ))
    )) # End of rule

        (?<PerlExpression>   (?<PerlStdExpression>
                                (?>(?&PerlLowPrecedenceNotExpression))
            (?: (?>(?&PerlOWS)) (?>(?&PerlLowPrecedenceInfixOperator))
                (?>(?&PerlOWS))    (?&PerlLowPrecedenceNotExpression)  )*+
    )) # End of rule

        (?<PerlLowPrecedenceNotExpression>   (?<PerlStdLowPrecedenceNotExpression>
            (?: not \b (?&PerlOWS) )*+  (?&PerlCommaList)
    )) # End of rule

        (?<PerlCommaList>   (?<PerlStdCommaList>
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            (?:
                (?: (?>(?&PerlComma))          (?&PerlOWS)   )++
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            )*+
                (?: (?>(?&PerlComma))          (?&PerlOWSOrEND)   )*+
    )) # End of rule

        (?<PerlAssignment>   (?<PerlStdAssignment>
                                (?>(?&PerlConditionalExpression))
            (?:
                (?>(?&PerlOWS)) (?>(?&PerlAssignmentOperator))
                (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )*+
    )) # End of rule

        (?<PerlScalarExpression>   (?<PerlStdScalarExpression>
        (?<PerlConditionalExpression>   (?<PerlStdConditionalExpression>
            (?>(?&PerlBinaryExpression))
            (?:
                (?>(?&PerlOWS)) \? (?>(?&PerlOWS)) (?>(?&PerlAssignment))
                (?>(?&PerlOWS))  : (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )?+
    )) # End of rule
    )) # End of rule

        (?<PerlBinaryExpression>   (?<PerlStdBinaryExpression>
                                (?>(?&PerlPrefixPostfixTerm))
            (?: (?>(?&PerlOWS)) (?>(?&PerlInfixBinaryOperator))
                (?>(?&PerlOWS))    (?&PerlPrefixPostfixTerm) )*+
    )) # End of rule

        (?<PerlPrefixPostfixTerm>   (?<PerlStdPrefixPostfixTerm>
            (?: (?>(?&PerlPrefixUnaryOperator))  (?&PerlOWS) )*+
            (?>(?&PerlTerm))
            (?: (?>(?&PerlOWS)) (?&PerlPostfixUnaryOperator) )?+
    )) # End of rule

        (?<PerlLvalue>   (?<PerlStdLvalue>
            (?>
                \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier)
            |
                \(                                                                     (?>(?&PerlOWS))
                    (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )      (?>(?&PerlOWS))
                    (?:
                        (?>(?&PerlComma))                                              (?>(?&PerlOWS))
                        (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )  (?>(?&PerlOWS))
                    )*+
                    (?: (?>(?&PerlComma)) (?&PerlOWS) )?+
                \)
            )
    )) # End of rule

        (?<PerlTerm>   (?<PerlStdTerm>
            (?>
                (?&PerlReturnExpression)

            # The remaining alternatives can all take postfix dereferencers...
            | (?:
                    (?= \$ )  (?&PerlScalarAccess)
              |
                    (?= \@ )  (?&PerlArrayAccess)
              |
                    (?=  % )  (?&PerlHashAccess)
              |
                    (?&PerlAnonymousSubroutine)
              |
                    (?>(?&PerlNullaryBuiltinFunction))  (?! (?>(?&PerlOWS)) \( )
              |
                    (?&PerlDoBlock) | (?&PerlEvalBlock)
              |
                    (?&PerlCall)
              |
                    (?&PerlVariableDeclaration)
              |
                    (?&PerlTypeglob)
              |
                    (?>(?&PerlParenthesesList))

                    # Can optionally do a [...] lookup straight after the parens,
                    # followd by any number of other look-ups
                    (?:
                        (?>(?&PerlOWS)) (?&PerlArrayIndexer)
                        (?:
                            (?>(?&PerlOWS))
                            (?>
                                (?&PerlArrayIndexer)
                            |   (?&PerlHashIndexer)
                            |   (?&PerlParenthesesList)
                            )
                        )*+
                    )?+
              |
                    (?&PerlAnonymousArray)
              |
                    (?&PerlAnonymousHash)
              |
                    (?&PerlDiamondOperator)
              |
                    (?&PerlContextualMatch)
              |
                    (?&PerlQuotelikeS)
              |
                    (?&PerlQuotelikeTR)
              |
                    (?&PerlQuotelikeQX)
              |
                    (?&PerlLiteral)
              )

              (?: (?&PerlTermPostfixDereference) )?+
            )
    )) # End of rule

        (?<PerlTermPostfixDereference>   (?<PerlStdTermPostfixDereference>
            # Must have at least one arrowed dereference...
            (?:
                (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?>  (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    (?:
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    )*+

                |   # A method call...
                    (?> (?&PerlQualifiedIdentifier) | (?! \$\#\* ) (?&PerlVariableScalar) )
                    (?: (?>(?&PerlOWS)) (?&PerlParenthesesList) )?+

                |   # An array or hash slice or k/v slice
                    # (provided it's not subsequently dereferenced)
                    [\@%] (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS))  [\@%]?+  [\[\{] )

                |   # An array max-index lookup...
                    \$\#\*

                |   # A scalar-, glob-, or subroutine dereference...
                    [\$*&] \*

                |   # An array dereference (provided it's not subsequently dereferenced)...
                    \@\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\[\@] )

                |   # A hash dereference (provided it's not subsequently dereferenced)...
                    \%\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\{%] )

                |   # A glob lookup...
                    \* (?&PerlHashIndexer)
                )
            )++
    )) # End of rule

        (?<PerlControlBlock>   (?<PerlStdControlBlock>
            (?> # Conditionals...
                (?> if | unless ) \b                 (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))          (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    elsif \b                         (?>(?&PerlOWS))
                    (?>(?&PerlParenthesesList))      (?>(?&PerlOWS))
                    (?&PerlBlock)
                )*+

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    else \b                          (?>(?&PerlOWS))
                    (?&PerlBlock)
                )?+

            |   # Loops...
                (?>
                    for(?:each)?+ \b
                    (?>(?&PerlOWS))
                    (?:
                        (?> # Explicitly aliased iterator variable...
                            (?> \\ (?>(?&PerlOWS))  (?> my | our | state )
                            |                       (?> my | our | state )  (?>(?&PerlOWS)) \\
                            )
                            (?>(?&PerlOWS))
                            (?> (?&PerlVariableScalar)
                            |   (?&PerlVariableArray)
                            |   (?&PerlVariableHash)
                            )
                        |
                            # List of scalar iterator variables...
                            my                                   (?>(?&PerlOWS))
                            \(                                   (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                (?: ,                            (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                )*+
                                (?: ,                            (?>(?&PerlOWS)) )?+
                            \)

                        |
                            # Implicitly aliased iterator variable...
                            (?> (?: my | our | state ) (?>(?&PerlOWS)) )?+
                            (?&PerlVariableScalar)
                        )?+
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlQuotelikeQW) )
                    |
                        (?&PPR_X_three_part_list)
                    )
                |
                    (?> while | until) \b (?>(?&PerlOWS))
                    (?&PerlParenthesesList)
                )

                (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                    (?>(?&PerlOWS))   continue
                    (?>(?&PerlOWS))   (?&PerlBlock)
                )?+

            | # Phasers...
                (?> BEGIN | END | CHECK | INIT | UNITCHECK ) \b   (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Try/catch/finallys...
                (?>(?&PerlTryCatchFinallyBlock))

            | # Defers...
                defer                                     (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Switches...
                (?> given | when ) \b                     (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))               (?>(?&PerlOWS))
                (?&PerlBlock)
            |
                default                                   (?>(?&PerlOWS))
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlFormat>   (?<PerlStdFormat>
            format
            (?: (?>(?&PerlNWS))  (?&PerlQualifiedIdentifier)  )?+
                (?>(?&PerlOWS))  = [^\n]*+
                (?&PPR_X_newline_and_heredoc)
            (?:
                (?! \. \n )
                [^\n\$\@]*+
                (?:
                    (?>
                        (?= \$ (?! \s ) )  (?&PerlScalarAccessNoSpace)
                    |
                        (?= \@ (?! \s ) )  (?&PerlArrayAccessNoSpace)
                    )
                    [^\n\$\@]*+
                )*+
                (?&PPR_X_newline_and_heredoc)
            )*+
            \. (?&PerlEndOfLine)
    )) # End of rule

        (?<PerlStatementModifier>   (?<PerlStdStatementModifier>
            (?> if | for(?:each)?+ | while | unless | until | when )
            \b
            (?>(?&PerlOWS))
            (?&PerlExpression)
    )) # End of rule

        (?<PerlBlock>   (?<PerlStdBlock>
            \{  (?>(?&PerlStatementSequence))  \}
    )) # End of rule

        (?<PerlCall>   (?<PerlStdCall>
            (?>
                [&]                                    (?>(?&PerlOWS))
                (?> (?&PerlBlock)
                |   (?&PerlVariableScalar)
                |   (?&PerlQualifiedIdentifier)
                )                                      (?>(?&PerlOWS))
                (?:
                    \(                                 (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))        (?&PerlOWS)   )?+
                    \)
                )?+
            |
                - (?>(?&PPR_X_filetest_name))            (?>(?&PerlOWS))
                (?&PerlPrefixPostfixTerm)?+
            |
                (?>(?&PerlBuiltinFunction))            (?>(?&PerlOWS))
                (?>
                    \(                                 (?>(?&PerlOWS))
                        (?>
                            (?= (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlExpression)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlExpression)
                        |
                            (?&PerlExpression)?+
                        )                              (?>(?&PerlOWS))
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            |
                (?>(?&PPR_X_non_reserved_identifier)) (?>(?&PerlOWS))
                (?>
                    \(                              (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))     (?&PerlOWS)  )?+
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))           (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))        (?&PerlNWS)
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            )
    )) # End of rule

        (?<PerlVariableDeclaration>   (?<PerlStdVariableDeclaration>
            (?> my | our | state ) \b           (?>(?&PerlOWS))
            (?: (?&PerlQualifiedIdentifier)        (?&PerlOWS)  )?+
            (?>(?&PerlLvalue))                  (?>(?&PerlOWS))
            (?&PerlAttributes)?+
    )) # End of rule

        (?<PerlDoBlock>   (?<PerlStdDoBlock>
            do (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlEvalBlock>   (?<PerlStdEvalBlock>
            eval (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlTryCatchFinallyBlock>   (?<PerlStdTryCatchFinallyBlock>

                try \b                                (?>(?&PerlOWS))
                (?>(?&PerlBlock))
                                                      (?>(?&PerlOWS))
                catch \b                              (?>(?&PerlOWS))
                \(  (?>(?&PerlVariableScalar))  \)    (?>(?&PerlOWS))
                (?>(?&PerlBlock))

            (?:
                                                      (?>(?&PerlOWS))
                finally \b                            (?>(?&PerlOWS))
                (?>(?&PerlBlock))
            )?+
    )) # End of rule

        (?<PerlAttributes>   (?<PerlStdAttributes>
            :
            (?>(?&PerlOWS))
            (?>(?&PerlIdentifier))
            (?:
                (?= \( ) (?&PPR_X_quotelike_body)
            )?+

            (?:
                (?> (?>(?&PerlOWS)) : (?&PerlOWS) | (?&PerlNWS) )
                (?>(?&PerlIdentifier))
                (?:
                    (?= \( ) (?&PPR_X_quotelike_body)
                )?+
            )*+
    )) # End of rule

        (?<PerlList>   (?<PerlStdList>
            (?> (?&PerlParenthesesList) | (?&PerlCommaList) )
    )) # End of rule

        (?<PerlParenthesesList>   (?<PerlStdParenthesesList>
            \(  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \)
    )) # End of rule

        (?<PerlAnonymousArray>   (?<PerlStdAnonymousArray>
            \[  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \]
    )) # End of rule

        (?<PerlAnonymousHash>   (?<PerlStdAnonymousHash>
            \{  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+ \}
    )) # End of rule

        (?<PerlArrayIndexer>   (?<PerlStdArrayIndexer>
            \[                          (?>(?&PerlOWS))
                (?>(?&PerlExpression))  (?>(?&PerlOWS))
            \]
    )) # End of rule

        (?<PerlHashIndexer>   (?<PerlStdHashIndexer>
            \{  (?>(?&PerlOWS))
                (?: -?+ (?&PerlIdentifier) | (?&PerlExpression) )  # (Note: MUST allow backtracking here)
                (?>(?&PerlOWS))
            \}
    )) # End of rule

        (?<PerlDiamondOperator>   (?<PerlStdDiamondOperator>
            <<>>    # Perl 5.22 "double diamond"
        |
            < (?! < )
                (?>(?&PPR_X_balanced_angles))
            >
            (?=
                (?>(?&PerlOWSOrEND))
                (?> \z | [,;\}\])?] | => | : (?! :)        # (
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule

        (?<PerlComma>   (?<PerlStdComma>
            (?> , | => )
    )) # End of rule

        (?<PerlPrefixUnaryOperator>   (?<PerlStdPrefixUnaryOperator>
            (?> \+\+ | -- | [!\\+~] | - (?! (?&PPR_X_filetest_name) \b ) )
    )) # End of rule

        (?<PerlPostfixUnaryOperator>   (?<PerlStdPostfixUnaryOperator>
            (?> \+\+  |  -- )
    )) # End of rule

        (?<PerlInfixBinaryOperator>   (?<PerlStdInfixBinaryOperator>
            (?>  [=!][~=]
            |    cmp
            |    <= >?+
            |    >=
            |    [lg][te]
            |    eq
            |    ne
            |    [+]             (?! [+=] )
            |     -              (?! [-=] )
            |    [.]{2,3}+
            |    [.%x]           (?! [=]  )
            |    [&|^][.]        (?! [=]  )
            |    [<>*&|/]{1,2}+  (?! [=]  )
            |    \^              (?! [=]  )
            |    ~~
            |    isa
            )
    )) # End of rule

        (?<PerlAssignmentOperator>   (?<PerlStdAssignmentOperator>
            (?:  [<>*&|/]{2}
            |  [-+.*/%x]
            |  [&|^][.]?+
            )?+
            =
            (?! > )
    )) # End of rule

        (?<PerlLowPrecedenceInfixOperator>   (?<PerlStdLowPrecedenceInfixOperator>
            (?> or | and | xor )
    )) # End of rule

        (?<PerlAnonymousSubroutine>   (?<PerlStdAnonymousSubroutine>
            sub \b
            (?>(?&PerlOWS))
            (?:
                # Perl pre 5.028
                (?:
                    (?>
                        (?&PerlSignature)    # Parameter list
                    |
                        \( [^)]*+ \)         # Prototype (
                    )
                    (?&PerlOWS)
                )?+
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            |
                # Perl post 5.028
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
                (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
            )
            (?&PerlBlock)
    )) # End of rule

        (?<PerlVariable>   (?<PerlStdVariable>
            (?= [\$\@%] )
            (?>
                (?&PerlScalarAccess)
            |   (?&PerlHashAccess)
            |   (?&PerlArrayAccess)
            )
            (?> (?&PerlTermPostfixDereference) )?+
    )) # End of rule

        (?<PerlTypeglob>   (?<PerlStdTypeglob>
            \*
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier))  (?: :: )?+
            |
                (?&PerlVariableScalar)
            |
                [][!"#\$%&'()*+,./:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccess>   (?<PerlStdArrayAccess>
            (?>(?&PerlVariableArray))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccessNoSpace>   (?<PerlStdArrayAccessNoSpace>
            (?>(?&PerlVariableArrayNoSpace))

            # Optional arrowless access(es) to begin
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any number of optional arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlArrayAccessNoSpaceNoArrow>   (?<PerlStdArrayAccessNoSpaceNoArrow>
            (?>(?&PerlVariableArray))
            (?:
                (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
            )*+
    )) # End of rule

        (?<PerlHashAccess>   (?<PerlStdHashAccess>
            (?>(?&PerlVariableHash))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlScalarAccess>   (?<PerlStdScalarAccess>
            (?>(?&PerlVariableScalar))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlScalarAccessNoSpace>   (?<PerlStdScalarAccessNoSpace>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) to begin...
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any nuber of arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlScalarAccessNoSpaceNoArrow>   (?<PerlStdScalarAccessNoSpaceNoArrow>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) (but parens can't be first)...
            (?:
                (?! \( )
                (?:
                    (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlVariableScalar>   (?<PerlStdVariableScalar>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
                (?&PerlOWS)
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ [!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-] \}
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableScalarNoSpace>   (?<PerlStdVariableScalarNoSpace>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableArray>   (?<PerlStdVariableArray>
            \@     (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableArrayNoSpace>   (?<PerlStdVariableArrayNoSpace>
            \@
            (?: \$ )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableHash>   (?<PerlStdVariableHash>
            %      (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)?+
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlLabel>   (?<PerlStdLabel>
            (?! (?> [msy] | q[wrxq]?+ | tr ) \b )
            (?>(?&PerlIdentifier))
            : (?! : )
    )) # End of rule

        (?<PerlLiteral>   (?<PerlStdLiteral>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlNumber)
            |   (?&PerlBareword)
            )
    )) # End of rule

        (?<PerlString>   (?<PerlStdString>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                (?: q \b | qq (?= (?>(?&PerlOWS)) ' ) )
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            |
                qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            |
                (?&PerlHeredoc)
            |
                (?&PerlVString)
            )
    )) # End of rule

        (?<PerlQuotelike>   (?<PerlStdQuotelike>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlQuotelikeQX)
            |   (?&PerlContextualMatch)
            |   (?&PerlQuotelikeS)
            |   (?&PerlQuotelikeTR)
            )
    )) # End of rule

        (?<PerlHeredoc>   (?<PerlStdHeredoc>
            # Match the introducer...
            <<
            (?<_heredoc_indented> [~]?+ )

            # Match the terminator specification...
            (?>
                \\?+   (?<_heredoc_terminator>  (?&PerlIdentifier)              )
            |
                (?>(?&PerlOWS))
                (?>
                    "  (?<_heredoc_terminator>  [^"\\]*+  (?: \\. [^"\\]*+ )*+  )  "  #"
                |
                    (?<PPR_X_HD_nointerp> ' )
                    (?<_heredoc_terminator>  [^'\\]*+  (?: \\. [^'\\]*+ )*+  )  '  #'
                |
                    `  (?<_heredoc_terminator>  [^`\\]*+  (?: \\. [^`\\]*+ )*+  )  `  #`
                )
            |
                    (?<_heredoc_terminator>                                  )
            )

            # Do we need to reset the heredoc cache???
            (?====================================================================================================================================================================================================================================================================)

            # Do we need to cache content lookahead for this heredoc???
            (?(?==============================================================================================================================================================================)

                # Lookahead to detect and remember trailing contents of heredoc
                (?=
                    [^\n]*+ \n                                   # Go to the end of the current line
                    (?==========)                                # Remember the start of the contents
                    (?==========================================)   # Skip earlier heredoc contents
                    (?>                                          # The heredoc contents consist of...
                        (?:
                            (?!
                                (?(?=========================) \h*+ )   # An indent (if it was a <<~)
                                \g{_heredoc_terminator}                 # The terminator
                                (?: \n | \z )                           # At an end-of-line
                            )
                            (?(<PPR_X_HD_nointerp>)
                                [^\n]*+ \n
                            |
                                [^\n\$\@]*+
                                (?:
                                    (?>
                                        (?===========================================)
                                        (?= \$ )  (?&PerlScalarAccess)
                                        (?===============================)
                                    |
                                        (?===========================================)
                                        (?= \@ )  (?&PerlArrayAccess)
                                        (?===============================)
                                    )
                                    [^\n\$\@]*+
                                )*+
                                \n (?==========================================)
                            )
                        )*+

                        (?(?=========================) \h*+ )            # An indent (if it was a <<~)
                        \g{_heredoc_terminator}                          # The specified terminator
                        (?: \n | \z )                                    # Followed by EOL
                    )

                    # Then memoize the skip for when it's subsequently needed by PerlOWS or PerlNWS...
                    (?===============================================================================================================================================================================================================================================================================================================================================================================)
                )
            )

    )) # End of rule

        (?<PerlQuotelikeQ>   (?<PerlStdQuotelikeQ>
            (?>
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                \b q \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQQ>   (?<PerlStdQuotelikeQQ>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                \b qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            )
    )) # End of rule

        (?<PerlQuotelikeQW>   (?<PerlStdQuotelikeQW>
            (?>
                qw \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQX>   (?<PerlStdQuotelikeQX>
            (?>
                `  [^`]*+  (?: \\. [^`]*+ )*+  `
            |
                qx
                    (?>
                        (?= (?>(?&PerlOWS)) ' )
                        (?&PPR_X_quotelike_body)
                    |
                        \b (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                        (?&PPR_X_quotelike_body_interpolated)
                    )
            )
    )) # End of rule

        (?<PerlQuotelikeS>   (?<PerlStdQuotelikeS>
        (?<PerlSubstitution>   (?<PerlStdSubstitution>
            s \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{]                 # )
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_regex_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Single-quoted syntax...
                (?= (?>(?&PerlOWS)) ' )
                (?>(?&PPR_X_regex_body_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Delimited syntax...
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            )
            [msixpodualgcern]*+
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeTR>   (?<PerlStdQuotelikeTR>
        (?<PerlTransliteration>   (?<PerlStdTransliteration>
            (?> tr | y ) \b
            (?! (?>(?&PerlOWS)) => )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{\«]                 # )]
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_quotelike_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Delimited syntax...
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            )
            [cdsr]*+
    )) # End of rule
    )) # End of rule

        (?<PerlContextualQuotelikeM>   (?<PerlStdContextualQuotelikeM>
        (?<PerlContextualMatch>   (?<PerlStdContextualMatch>
            (?<PerlQuotelikeM>
            (?<PerlMatch>
                (?>
                    \/\/
                |
                    (?>
                        m (?= [#] )
                    |
                        m \b
                        (?! (?>(?&PerlOWS)) => )
                    |
                        (?= \/ [^/] )
                    )
                    (?&PPR_X_regex_body_interpolated)
                )
                [msixpodualgcn]*+
            ) # End of rule (?<PerlMatch>)
            ) # End of rule (?<PerlQuotelikeM>)
            (?=
                (?>(?&PerlOWS))
                (?> \z | [,;\}\])?] | => | : (?! :)
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeQR>   (?<PerlStdQuotelikeQR>
            qr \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>(?&PPR_X_regex_body_interpolated))
            [msixpodualn]*+
    )) # End of rule

        (?<PerlRegex>   (?<PerlStdRegex>
            (?>
                (?&PerlMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule

        (?<PerlContextualRegex>   (?<PerlStdContextualRegex>
            (?>
                (?&PerlContextualMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule


        (?<PerlBuiltinFunction>   (?<PerlStdBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?=[^\W\d]) # Skip if possible
            (?>
                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(?>at|udy)|leep|rand|qrt|ay|in)
                | 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)
                | r(?>e(?>ad(?>lin[ek]|pipe|dir)?|(?>quir|vers|nam)e|winddir|turn|set|cv|do|f)|index|mdir|and)
                | c(?>h(?>o(?>m?p|wn)|r(?>oot)?|dir|mod)|o(?>n(?>tinue|nect)|s)|lose(?>dir)?|aller|rypt)
                | e(?>nd(?>(?>hos|ne)t|p(?>roto|w)|serv|gr)ent|x(?>i(?>sts|t)|ec|p)|ach|val(?>bytes)?+|of)
                | l(?>o(?>c(?>al(?>time)?|k)|g)|i(?>sten|nk)|(?>sta|as)t|c(?>first)?|ength)
                | u(?>n(?>(?>lin|pac)k|shift|def|tie)|c(?>first)?|mask|time)
                | p(?>r(?>ototype|intf?)|ack(?>age)?|o[ps]|ipe|ush)
                | d(?>bm(?>close|open)|e(?>fined|lete)|ump|ie|o)
                | f(?>or(?>m(?>line|at)|k)|ileno|cntl|c|lock)
                | t(?>i(?>mes?|ed?)|ell(?>dir)?|runcate)
                | w(?>a(?>it(?>pid)?|ntarray|rn)|rite)
                | m(?>sg(?>ctl|get|rcv|snd)|kdir|ap)
                | b(?>in(?>mode|d)|less|reak)
                | i(?>n(?>dex|t)|mport|octl)
                | a(?>ccept|larm|tan2|bs)
                | o(?>pen(?>dir)?|ct|rd)
                | v(?>alues|ec)
                | k(?>eys|ill)
                | quotemeta
                | join
                | next
                | hex
                | _
            )
            \b
    )) # End of rule

        (?<PerlNullaryBuiltinFunction>   (?<PerlStdNullaryBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?= [^\W\d] )  # Skip if possible
            (?>
                get(?:(?:(?:hos|ne)t|serv|gr)ent|p(?:(?:roto|w)ent|pid)|login)
                | end(?:(?:hos|ne)t|p(?:roto|w)|serv|gr)ent
                | wa(?:ntarray|it)
                | times?
                | fork
                | _
            )
            \b
    )) # End of rule

        (?<PerlVersionNumber>   (?<PerlStdVersionNumber>
            (?>
                (?&PerlVString)
            |
                (?>(?&PPR_X_digit_seq))
                (?: \. (?&PPR_X_digit_seq)?+ )*+
            )
    )) # End of rule

        (?<PerlVString>   (?<PerlStdVString>
            v  (?>(?&PPR_X_digit_seq))  (?: \. (?&PPR_X_digit_seq) )*+
    )) # End of rule

        (?<PerlNumber>   (?<PerlStdNumber>
            [+-]?+
            (?>
                0  (?>  x   (?&PPR_X_x_digit_seq)
                |       b   (?&PPR_X_b_digit_seq)
                |       o?  (?&PPR_X_o_digit_seq)
                )
            |
                (?>
                        (?>(?&PPR_X_digit_seq))
                    (?: \. (?&PPR_X_digit_seq)?+ )?+
                |
                        \. (?&PPR_X_digit_seq)
                )
                (?: [eE] [+-]?+ (?&PPR_X_digit_seq) )?+
            )
    )) # End of rule

        (?<PerlOldQualifiedIdentifier>   (?<PerlStdOldQualifiedIdentifier>
            (?> (?> :: | ' ) \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlQualifiedIdentifier>   (?<PerlStdQualifiedIdentifier>
            (?>     ::       \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlIdentifier>   (?<PerlStdIdentifier>
                                    [^\W\d]\w*+
    )) # End of rule

        (?<PerlBareword>   (?<PerlStdBareword>
            (?! (?> (?= \w )
                    (?> for(?:each)?+ | while | if      | unless | until | use | no
                    |   given         | when  | sub     | return | my    | our | state
                    |   try           | catch | finally | defer
                    )
                |   (?&PPR_X_named_op)
                |   __ (?> END | DATA ) __ \b
                ) \b
                (?! (?>(?&PerlOWS)) => )
            )
            (?! (?> q[qwrx]?+ | [mys] | tr ) \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            )
            (?: :: )?+
            [^\W\d]\w*+
            (?: (?: :: | ' )  [^\W\d]\w*+  )*+
            (?: :: )?+
            (?! \( )    # )
        |
            :: (?! \w | \{ )
    )) # End of rule

        (?<PerlKeyword>   (?<PerlStdKeyword>
            (?!)    # None, by default, but can be overridden in a composing regex
    )) # End of rule

        (?<PerlPodSequence>   (?<PerlStdPodSequence>
            (?>(?&PerlOWS))  (?: (?>(?&PerlPod))  (?&PerlOWS) )*+
    )) # End of rule

        (?<PerlPod>   (?<PerlStdPod>
            ^ = [^\W\d]\w*+             # A line starting with =<identifier>
            .*?                         # Up to the first...
            (?>
                ^ = cut \b [^\n]*+ $    # ...line starting with =cut
            |                           # or
                \z                      # ...EOF
            )
    )) # End of rule


        ##### Whitespace matching (part of API) #################################

        (?<PerlOWSOrEND>   (?<PerlStdOWSOrEND>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            |
                __ (?> END | DATA ) __ \b .*+ \z
            )*+
    )) # End of rule

        (?<PerlOWS>   (?<PerlStdOWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )*+
    )) # End of rule

        (?<PerlNWS>   (?<PerlStdNWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )++
    )) # End of rule

        (?<PerlEndOfLine>   (?<PerlStdEndOfLine>
            \n
    )) # End of rule


        ###### Internal components (not part of API) ##########################

        (?<PPR_X_named_op>
            (?> cmp
            |   [lg][te]
            |   eq
            |   ne
            |   and
            |   or
            |   xor
            )
        ) # End of rule (?<PPR_X_named_op>)

        (?<PPR_X_non_reserved_identifier>
            (?! (?>
                   for(?:each)?+ | while   | if    | unless | until | given | when | default
                |  sub | format  | use     | no    | my     | our   | state
                |  try | catch   | finally | defer
                |  (?&PPR_X_named_op)
                |  [msy] | q[wrxq]?+ | tr
                |   __ (?> END | DATA ) __
                )
                \b
            )
            (?>(?&PerlQualifiedIdentifier))
            (?! :: )
        ) # End of rule (?<PPR_X_non_reserved_identifier>)

        (?<PPR_X_three_part_list>
            \(  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            \)
        ) # End of rule (?<PPR_X_three_part_list>)

        (?<PPR_X_indirect_obj>
            (?&PerlBareword)
        |
            (?>(?&PerlVariableScalar))
            (?! (?>(?&PerlOWS)) (?> [<\[\{] | -> ) )
        ) # End of rule (?<PPR_X_indirect_obj>)

        (?<PPR_X_quotelike_body>
            (?>(?&PPR_X_quotelike_body_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body>)

        (?<PPR_X_balanced_parens>
            [^)(\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^)(\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens>)

        (?<PPR_X_balanced_curlies>
            [^\}\{\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^\}\{\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies>)

        (?<PPR_X_balanced_squares>
            [^][\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?&PPR_X_balanced_squares)  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^][\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares>)

        (?<PPR_X_balanced_angles>
            [^><\\\n]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^><\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles>)

        (?<PPR_X_balanced_unicode_delims>
            (?============================)* <-- HERE +
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                (?============================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims>)

        (?<PPR_X_regex_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))            (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))            (?= \] )
                |
                    \(  (?>
                            \?{1,2}+ (?= \{ )
                            (?>(?&PerlBlock))
                        |
                            (?! \?{1,2}+ \{ )
                            (?>(?&PPR_X_balanced_parens))
                        )                                       (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))              (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_regex_body_unclosed>)

        (?<PPR_X_quotelike_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))        (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))        (?= \] )
                |
                    \(  (?>(?&PPR_X_balanced_parens))         (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))          (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_quotelike_body_unclosed>)

        (?<PPR_X_quotelike_body_interpolated>
            (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated>)

        (?<PPR_X_regex_body_interpolated>
            (?>(?&PPR_X_regex_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_regex_body_interpolated>)

        (?<PPR_X_balanced_parens_regex_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_regex_interpolated>)

        (?<PPR_X_balanced_curlies_regex_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_regex_interpolated>)

        (?<PPR_X_balanced_squares_regex_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\](|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\](|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_regex_interpolated>)

        (?<PPR_X_balanced_angles_regex_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_regex_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_regex_interpolated>)


        (?<PPR_X_balanced_unicode_delims_regex_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=======================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?========================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlScalarAccessNoSpace)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_regex_interpolated>)


        (?<PPR_X_balanced_parens_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_interpolated>)

        (?<PPR_X_balanced_curlies_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_interpolated>)

        (?<PPR_X_balanced_squares_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\]] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\]] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_interpolated>)

        (?<PPR_X_balanced_unicode_delims_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! \s | (?======================) ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! \s | (?======================) ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_interpolated>)

        (?<PPR_X_balanced_angles_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_interpolated>)

        (?<PPR_X_regex_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#|()] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#|()] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_regex_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s|()-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s|()-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_regex_body_unclosed)
        ) # End of rule (?<PPR_X_regex_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_quotelike_body_unclosed)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_s_e_check>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body_interpolated)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check>)

        (?<PPR_X_quotelike_s_e_check_uninterpolated>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check_uninterpolated>)

        (?<PPR_X_filetest_name>   [ABCMORSTWXbcdefgkloprstuwxz]          )

        (?<PPR_X_digit_seq>               \d++ (?: _?+         \d++ )*+  )
        (?<PPR_X_x_digit_seq>     [\da-fA-F]++ (?: _?+ [\da-fA-F]++ )*+  )
        (?<PPR_X_o_digit_seq>          [0-7]++ (?: _?+      [0-7]++ )*+  )
        (?<PPR_X_b_digit_seq>          [0-1]++ (?: _?+      [0-1]++ )*+  )

        (?<PPR_X_newline_and_heredoc>
            \n (?===================================================================================================)
        ) # End of rule (?<PPR_X_newline_and_heredoc>)
    )
    # END OF GRAMMAR
)/ at (eval 33) line 2201.
t/plugin-substituteandreturn.t .. 
Dubious, test returned 255 (wstat 65280, 0xff00)
No subtests run 
(?============================)* matches null string many times in regex; marked by <-- HERE in m/(?(DEFINE)

(?<PerlSubroutineDeclaration>(?<PerlWrapperSubroutineDeclaration_001>((?&PerlStdSubroutineDeclaration))(?================================================================)))

) (?^umsx:
    (?(DEFINE)

        (?<PerlEntireDocument>   (?<PerlStdEntireDocument>
            \A
            (?&PerlDocument)
            (?:
                \Z
            |
                (?(?===========================)
                    (?>(?&PerlOWSOrEND))  (?=======)  ([^\n]++)
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlDocument>   (?<PerlStdDocument>
            \x{FEFF}?+                      # Optional BOM marker
            (?&PerlStatementSequence)
            (?&PerlOWSOrEND)
    )) # End of rule

        (?<PerlStatementSequence>   (?<PerlStdStatementSequence>
            (?>(?&PerlPodSequence))
            (?:
                (?&PerlStatement)
                (?&PerlPodSequence)
            )*+
    )) # End of rule

        (?<PerlStatement>   (?<PerlStdStatement>
            (?>
                (?>(?&PerlPodSequence))
                (?: (?>(?&PerlLabel)) (?&PerlOWSOrEND) )?+
                (?>(?&PerlPodSequence))
                (?>
                    (?&PerlKeyword)
                |
                    (?&PerlSubroutineDeclaration)
                |
                    (?&PerlUseStatement)
                |
                    (?&PerlPackageDeclaration)
                |
                    (?&PerlControlBlock)
                |
                    (?&PerlFormat)
                |
                    (?>(?&PerlExpression))          (?>(?&PerlOWS))
                    (?&PerlStatementModifier)?+     (?>(?&PerlOWSOrEND))
                    (?> ; | (?= \} | \z ))
                |
                    (?&PerlBlock)
                |
                    ;
                )

            | # A yada-yada...
                \.\.\. (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just a label...
                (?>(?&PerlLabel)) (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just an empty statement...
                (?>(?&PerlOWS)) ;

            | # An error (report it, if it's the first)...
                (?(?===========================)
                    (?> (?&PerlOWS) )
                    (?! (?: \} | \z ) )
                    (?=========)
                    ( (?&PerlExpression) (?&PerlOWS) [^\n]++ | [^;\}]++ )
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlSubroutineDeclaration>   (?<PerlStdSubroutineDeclaration>
        (?>
            (?: (?> my | our | state ) \b      (?>(?&PerlOWS)) )?+
            sub \b                             (?>(?&PerlOWS))
            (?>(?&PerlOldQualifiedIdentifier))    (?&PerlOWS)
        |
            AUTOLOAD                              (?&PerlOWS)
        |
            DESTROY                               (?&PerlOWS)
        )
        (?:
            # Perl pre 5.028
            (?:
                (?>
                    (?&PerlSignature)    # Parameter list
                |
                    \( [^)]*+ \)         # Prototype (
                )
                (?&PerlOWS)
            )?+
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
        |
            # Perl post 5.028
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
        )
        (?> ; | (?&PerlBlock) )
    )) # End of rule

        (?<PerlSignature>   (?<PerlStdSignature>
            \(
                (?>(?&PerlOWS))
                (?&PerlParameterDeclaration)*+
            \)
    )) # End of rule

        (?<PerlParameterDeclaration>   (?<PerlStdParameterDeclaration>
            (?:
                    \$  (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)?+ (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableScalar) (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)   (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableArray) (?>(?&PerlOWS))
            |
                (?&PerlVariableHash)  (?>(?&PerlOWS))
            )
            (?: , (?>(?&PerlOWS))  |  (?= \) ) )     # (
    )) # End of rule


        (?<PerlUseStatement>   (?<PerlStdUseStatement>
        (?: use | no ) (?>(?&PerlNWS))
        (?>
            (?&PerlVersionNumber)
        |
            (?>(?&PerlQualifiedIdentifier))
            (?: (?>(?&PerlNWS)) (?&PerlVersionNumber)
                (?! (?>(?&PerlOWS)) (?> (?&PerlInfixBinaryOperator) | (?&PerlComma) | \? ) )
            )?+
            (?: (?>(?&PerlNWS)) (?&PerlPodSequence) )?+
            (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        )
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlReturnExpression>   (?<PerlStdReturnExpression>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
    )) # End of rule

        (?<PerlReturnStatement>   (?<PerlStdReturnStatement>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlPackageDeclaration>   (?<PerlStdPackageDeclaration>
        package
            (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
        (?: (?>(?&PerlNWS)) (?&PerlVersionNumber) )?+
            (?>(?&PerlOWSOrEND)) (?> ; | (?&PerlBlock) | (?= \} | \z ))
    )) # End of rule

        (?<PerlExpression>   (?<PerlStdExpression>
                                (?>(?&PerlLowPrecedenceNotExpression))
            (?: (?>(?&PerlOWS)) (?>(?&PerlLowPrecedenceInfixOperator))
                (?>(?&PerlOWS))    (?&PerlLowPrecedenceNotExpression)  )*+
    )) # End of rule

        (?<PerlLowPrecedenceNotExpression>   (?<PerlStdLowPrecedenceNotExpression>
            (?: not \b (?&PerlOWS) )*+  (?&PerlCommaList)
    )) # End of rule

        (?<PerlCommaList>   (?<PerlStdCommaList>
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            (?:
                (?: (?>(?&PerlComma))          (?&PerlOWS)   )++
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            )*+
                (?: (?>(?&PerlComma))          (?&PerlOWSOrEND)   )*+
    )) # End of rule

        (?<PerlAssignment>   (?<PerlStdAssignment>
                                (?>(?&PerlConditionalExpression))
            (?:
                (?>(?&PerlOWS)) (?>(?&PerlAssignmentOperator))
                (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )*+
    )) # End of rule

        (?<PerlScalarExpression>   (?<PerlStdScalarExpression>
        (?<PerlConditionalExpression>   (?<PerlStdConditionalExpression>
            (?>(?&PerlBinaryExpression))
            (?:
                (?>(?&PerlOWS)) \? (?>(?&PerlOWS)) (?>(?&PerlAssignment))
                (?>(?&PerlOWS))  : (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )?+
    )) # End of rule
    )) # End of rule

        (?<PerlBinaryExpression>   (?<PerlStdBinaryExpression>
                                (?>(?&PerlPrefixPostfixTerm))
            (?: (?>(?&PerlOWS)) (?>(?&PerlInfixBinaryOperator))
                (?>(?&PerlOWS))    (?&PerlPrefixPostfixTerm) )*+
    )) # End of rule

        (?<PerlPrefixPostfixTerm>   (?<PerlStdPrefixPostfixTerm>
            (?: (?>(?&PerlPrefixUnaryOperator))  (?&PerlOWS) )*+
            (?>(?&PerlTerm))
            (?: (?>(?&PerlOWS)) (?&PerlPostfixUnaryOperator) )?+
    )) # End of rule

        (?<PerlLvalue>   (?<PerlStdLvalue>
            (?>
                \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier)
            |
                \(                                                                     (?>(?&PerlOWS))
                    (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )      (?>(?&PerlOWS))
                    (?:
                        (?>(?&PerlComma))                                              (?>(?&PerlOWS))
                        (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )  (?>(?&PerlOWS))
                    )*+
                    (?: (?>(?&PerlComma)) (?&PerlOWS) )?+
                \)
            )
    )) # End of rule

        (?<PerlTerm>   (?<PerlStdTerm>
            (?>
                (?&PerlReturnExpression)

            # The remaining alternatives can all take postfix dereferencers...
            | (?:
                    (?= \$ )  (?&PerlScalarAccess)
              |
                    (?= \@ )  (?&PerlArrayAccess)
              |
                    (?=  % )  (?&PerlHashAccess)
              |
                    (?&PerlAnonymousSubroutine)
              |
                    (?>(?&PerlNullaryBuiltinFunction))  (?! (?>(?&PerlOWS)) \( )
              |
                    (?&PerlDoBlock) | (?&PerlEvalBlock)
              |
                    (?&PerlCall)
              |
                    (?&PerlVariableDeclaration)
              |
                    (?&PerlTypeglob)
              |
                    (?>(?&PerlParenthesesList))

                    # Can optionally do a [...] lookup straight after the parens,
                    # followd by any number of other look-ups
                    (?:
                        (?>(?&PerlOWS)) (?&PerlArrayIndexer)
                        (?:
                            (?>(?&PerlOWS))
                            (?>
                                (?&PerlArrayIndexer)
                            |   (?&PerlHashIndexer)
                            |   (?&PerlParenthesesList)
                            )
                        )*+
                    )?+
              |
                    (?&PerlAnonymousArray)
              |
                    (?&PerlAnonymousHash)
              |
                    (?&PerlDiamondOperator)
              |
                    (?&PerlContextualMatch)
              |
                    (?&PerlQuotelikeS)
              |
                    (?&PerlQuotelikeTR)
              |
                    (?&PerlQuotelikeQX)
              |
                    (?&PerlLiteral)
              )

              (?: (?&PerlTermPostfixDereference) )?+
            )
    )) # End of rule

        (?<PerlTermPostfixDereference>   (?<PerlStdTermPostfixDereference>
            # Must have at least one arrowed dereference...
            (?:
                (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?>  (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    (?:
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    )*+

                |   # A method call...
                    (?> (?&PerlQualifiedIdentifier) | (?! \$\#\* ) (?&PerlVariableScalar) )
                    (?: (?>(?&PerlOWS)) (?&PerlParenthesesList) )?+

                |   # An array or hash slice or k/v slice
                    # (provided it's not subsequently dereferenced)
                    [\@%] (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS))  [\@%]?+  [\[\{] )

                |   # An array max-index lookup...
                    \$\#\*

                |   # A scalar-, glob-, or subroutine dereference...
                    [\$*&] \*

                |   # An array dereference (provided it's not subsequently dereferenced)...
                    \@\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\[\@] )

                |   # A hash dereference (provided it's not subsequently dereferenced)...
                    \%\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\{%] )

                |   # A glob lookup...
                    \* (?&PerlHashIndexer)
                )
            )++
    )) # End of rule

        (?<PerlControlBlock>   (?<PerlStdControlBlock>
            (?> # Conditionals...
                (?> if | unless ) \b                 (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))          (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    elsif \b                         (?>(?&PerlOWS))
                    (?>(?&PerlParenthesesList))      (?>(?&PerlOWS))
                    (?&PerlBlock)
                )*+

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    else \b                          (?>(?&PerlOWS))
                    (?&PerlBlock)
                )?+

            |   # Loops...
                (?>
                    for(?:each)?+ \b
                    (?>(?&PerlOWS))
                    (?:
                        (?> # Explicitly aliased iterator variable...
                            (?> \\ (?>(?&PerlOWS))  (?> my | our | state )
                            |                       (?> my | our | state )  (?>(?&PerlOWS)) \\
                            )
                            (?>(?&PerlOWS))
                            (?> (?&PerlVariableScalar)
                            |   (?&PerlVariableArray)
                            |   (?&PerlVariableHash)
                            )
                        |
                            # List of scalar iterator variables...
                            my                                   (?>(?&PerlOWS))
                            \(                                   (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                (?: ,                            (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                )*+
                                (?: ,                            (?>(?&PerlOWS)) )?+
                            \)

                        |
                            # Implicitly aliased iterator variable...
                            (?> (?: my | our | state ) (?>(?&PerlOWS)) )?+
                            (?&PerlVariableScalar)
                        )?+
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlQuotelikeQW) )
                    |
                        (?&PPR_X_three_part_list)
                    )
                |
                    (?> while | until) \b (?>(?&PerlOWS))
                    (?&PerlParenthesesList)
                )

                (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                    (?>(?&PerlOWS))   continue
                    (?>(?&PerlOWS))   (?&PerlBlock)
                )?+

            | # Phasers...
                (?> BEGIN | END | CHECK | INIT | UNITCHECK ) \b   (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Try/catch/finallys...
                (?>(?&PerlTryCatchFinallyBlock))

            | # Defers...
                defer                                     (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Switches...
                (?> given | when ) \b                     (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))               (?>(?&PerlOWS))
                (?&PerlBlock)
            |
                default                                   (?>(?&PerlOWS))
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlFormat>   (?<PerlStdFormat>
            format
            (?: (?>(?&PerlNWS))  (?&PerlQualifiedIdentifier)  )?+
                (?>(?&PerlOWS))  = [^\n]*+
                (?&PPR_X_newline_and_heredoc)
            (?:
                (?! \. \n )
                [^\n\$\@]*+
                (?:
                    (?>
                        (?= \$ (?! \s ) )  (?&PerlScalarAccessNoSpace)
                    |
                        (?= \@ (?! \s ) )  (?&PerlArrayAccessNoSpace)
                    )
                    [^\n\$\@]*+
                )*+
                (?&PPR_X_newline_and_heredoc)
            )*+
            \. (?&PerlEndOfLine)
    )) # End of rule

        (?<PerlStatementModifier>   (?<PerlStdStatementModifier>
            (?> if | for(?:each)?+ | while | unless | until | when )
            \b
            (?>(?&PerlOWS))
            (?&PerlExpression)
    )) # End of rule

        (?<PerlBlock>   (?<PerlStdBlock>
            \{  (?>(?&PerlStatementSequence))  \}
    )) # End of rule

        (?<PerlCall>   (?<PerlStdCall>
            (?>
                [&]                                    (?>(?&PerlOWS))
                (?> (?&PerlBlock)
                |   (?&PerlVariableScalar)
                |   (?&PerlQualifiedIdentifier)
                )                                      (?>(?&PerlOWS))
                (?:
                    \(                                 (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))        (?&PerlOWS)   )?+
                    \)
                )?+
            |
                - (?>(?&PPR_X_filetest_name))            (?>(?&PerlOWS))
                (?&PerlPrefixPostfixTerm)?+
            |
                (?>(?&PerlBuiltinFunction))            (?>(?&PerlOWS))
                (?>
                    \(                                 (?>(?&PerlOWS))
                        (?>
                            (?= (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlExpression)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlExpression)
                        |
                            (?&PerlExpression)?+
                        )                              (?>(?&PerlOWS))
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            |
                (?>(?&PPR_X_non_reserved_identifier)) (?>(?&PerlOWS))
                (?>
                    \(                              (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))     (?&PerlOWS)  )?+
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))           (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))        (?&PerlNWS)
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            )
    )) # End of rule

        (?<PerlVariableDeclaration>   (?<PerlStdVariableDeclaration>
            (?> my | our | state ) \b           (?>(?&PerlOWS))
            (?: (?&PerlQualifiedIdentifier)        (?&PerlOWS)  )?+
            (?>(?&PerlLvalue))                  (?>(?&PerlOWS))
            (?&PerlAttributes)?+
    )) # End of rule

        (?<PerlDoBlock>   (?<PerlStdDoBlock>
            do (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlEvalBlock>   (?<PerlStdEvalBlock>
            eval (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlTryCatchFinallyBlock>   (?<PerlStdTryCatchFinallyBlock>

                try \b                                (?>(?&PerlOWS))
                (?>(?&PerlBlock))
                                                      (?>(?&PerlOWS))
                catch \b                              (?>(?&PerlOWS))
                \(  (?>(?&PerlVariableScalar))  \)    (?>(?&PerlOWS))
                (?>(?&PerlBlock))

            (?:
                                                      (?>(?&PerlOWS))
                finally \b                            (?>(?&PerlOWS))
                (?>(?&PerlBlock))
            )?+
    )) # End of rule

        (?<PerlAttributes>   (?<PerlStdAttributes>
            :
            (?>(?&PerlOWS))
            (?>(?&PerlIdentifier))
            (?:
                (?= \( ) (?&PPR_X_quotelike_body)
            )?+

            (?:
                (?> (?>(?&PerlOWS)) : (?&PerlOWS) | (?&PerlNWS) )
                (?>(?&PerlIdentifier))
                (?:
                    (?= \( ) (?&PPR_X_quotelike_body)
                )?+
            )*+
    )) # End of rule

        (?<PerlList>   (?<PerlStdList>
            (?> (?&PerlParenthesesList) | (?&PerlCommaList) )
    )) # End of rule

        (?<PerlParenthesesList>   (?<PerlStdParenthesesList>
            \(  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \)
    )) # End of rule

        (?<PerlAnonymousArray>   (?<PerlStdAnonymousArray>
            \[  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \]
    )) # End of rule

        (?<PerlAnonymousHash>   (?<PerlStdAnonymousHash>
            \{  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+ \}
    )) # End of rule

        (?<PerlArrayIndexer>   (?<PerlStdArrayIndexer>
            \[                          (?>(?&PerlOWS))
                (?>(?&PerlExpression))  (?>(?&PerlOWS))
            \]
    )) # End of rule

        (?<PerlHashIndexer>   (?<PerlStdHashIndexer>
            \{  (?>(?&PerlOWS))
                (?: -?+ (?&PerlIdentifier) | (?&PerlExpression) )  # (Note: MUST allow backtracking here)
                (?>(?&PerlOWS))
            \}
    )) # End of rule

        (?<PerlDiamondOperator>   (?<PerlStdDiamondOperator>
            <<>>    # Perl 5.22 "double diamond"
        |
            < (?! < )
                (?>(?&PPR_X_balanced_angles))
            >
            (?=
                (?>(?&PerlOWSOrEND))
                (?> \z | [,;\}\])?] | => | : (?! :)        # (
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule

        (?<PerlComma>   (?<PerlStdComma>
            (?> , | => )
    )) # End of rule

        (?<PerlPrefixUnaryOperator>   (?<PerlStdPrefixUnaryOperator>
            (?> \+\+ | -- | [!\\+~] | - (?! (?&PPR_X_filetest_name) \b ) )
    )) # End of rule

        (?<PerlPostfixUnaryOperator>   (?<PerlStdPostfixUnaryOperator>
            (?> \+\+  |  -- )
    )) # End of rule

        (?<PerlInfixBinaryOperator>   (?<PerlStdInfixBinaryOperator>
            (?>  [=!][~=]
            |    cmp
            |    <= >?+
            |    >=
            |    [lg][te]
            |    eq
            |    ne
            |    [+]             (?! [+=] )
            |     -              (?! [-=] )
            |    [.]{2,3}+
            |    [.%x]           (?! [=]  )
            |    [&|^][.]        (?! [=]  )
            |    [<>*&|/]{1,2}+  (?! [=]  )
            |    \^              (?! [=]  )
            |    ~~
            |    isa
            )
    )) # End of rule

        (?<PerlAssignmentOperator>   (?<PerlStdAssignmentOperator>
            (?:  [<>*&|/]{2}
            |  [-+.*/%x]
            |  [&|^][.]?+
            )?+
            =
            (?! > )
    )) # End of rule

        (?<PerlLowPrecedenceInfixOperator>   (?<PerlStdLowPrecedenceInfixOperator>
            (?> or | and | xor )
    )) # End of rule

        (?<PerlAnonymousSubroutine>   (?<PerlStdAnonymousSubroutine>
            sub \b
            (?>(?&PerlOWS))
            (?:
                # Perl pre 5.028
                (?:
                    (?>
                        (?&PerlSignature)    # Parameter list
                    |
                        \( [^)]*+ \)         # Prototype (
                    )
                    (?&PerlOWS)
                )?+
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            |
                # Perl post 5.028
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
                (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
            )
            (?&PerlBlock)
    )) # End of rule

        (?<PerlVariable>   (?<PerlStdVariable>
            (?= [\$\@%] )
            (?>
                (?&PerlScalarAccess)
            |   (?&PerlHashAccess)
            |   (?&PerlArrayAccess)
            )
            (?> (?&PerlTermPostfixDereference) )?+
    )) # End of rule

        (?<PerlTypeglob>   (?<PerlStdTypeglob>
            \*
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier))  (?: :: )?+
            |
                (?&PerlVariableScalar)
            |
                [][!"#\$%&'()*+,./:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccess>   (?<PerlStdArrayAccess>
            (?>(?&PerlVariableArray))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccessNoSpace>   (?<PerlStdArrayAccessNoSpace>
            (?>(?&PerlVariableArrayNoSpace))

            # Optional arrowless access(es) to begin
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any number of optional arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlArrayAccessNoSpaceNoArrow>   (?<PerlStdArrayAccessNoSpaceNoArrow>
            (?>(?&PerlVariableArray))
            (?:
                (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
            )*+
    )) # End of rule

        (?<PerlHashAccess>   (?<PerlStdHashAccess>
            (?>(?&PerlVariableHash))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlScalarAccess>   (?<PerlStdScalarAccess>
            (?>(?&PerlVariableScalar))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlScalarAccessNoSpace>   (?<PerlStdScalarAccessNoSpace>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) to begin...
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any nuber of arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlScalarAccessNoSpaceNoArrow>   (?<PerlStdScalarAccessNoSpaceNoArrow>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) (but parens can't be first)...
            (?:
                (?! \( )
                (?:
                    (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlVariableScalar>   (?<PerlStdVariableScalar>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
                (?&PerlOWS)
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ [!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-] \}
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableScalarNoSpace>   (?<PerlStdVariableScalarNoSpace>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableArray>   (?<PerlStdVariableArray>
            \@     (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableArrayNoSpace>   (?<PerlStdVariableArrayNoSpace>
            \@
            (?: \$ )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableHash>   (?<PerlStdVariableHash>
            %      (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)?+
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlLabel>   (?<PerlStdLabel>
            (?! (?> [msy] | q[wrxq]?+ | tr ) \b )
            (?>(?&PerlIdentifier))
            : (?! : )
    )) # End of rule

        (?<PerlLiteral>   (?<PerlStdLiteral>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlNumber)
            |   (?&PerlBareword)
            )
    )) # End of rule

        (?<PerlString>   (?<PerlStdString>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                (?: q \b | qq (?= (?>(?&PerlOWS)) ' ) )
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            |
                qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            |
                (?&PerlHeredoc)
            |
                (?&PerlVString)
            )
    )) # End of rule

        (?<PerlQuotelike>   (?<PerlStdQuotelike>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlQuotelikeQX)
            |   (?&PerlContextualMatch)
            |   (?&PerlQuotelikeS)
            |   (?&PerlQuotelikeTR)
            )
    )) # End of rule

        (?<PerlHeredoc>   (?<PerlStdHeredoc>
            # Match the introducer...
            <<
            (?<_heredoc_indented> [~]?+ )

            # Match the terminator specification...
            (?>
                \\?+   (?<_heredoc_terminator>  (?&PerlIdentifier)              )
            |
                (?>(?&PerlOWS))
                (?>
                    "  (?<_heredoc_terminator>  [^"\\]*+  (?: \\. [^"\\]*+ )*+  )  "  #"
                |
                    (?<PPR_X_HD_nointerp> ' )
                    (?<_heredoc_terminator>  [^'\\]*+  (?: \\. [^'\\]*+ )*+  )  '  #'
                |
                    `  (?<_heredoc_terminator>  [^`\\]*+  (?: \\. [^`\\]*+ )*+  )  `  #`
                )
            |
                    (?<_heredoc_terminator>                                  )
            )

            # Do we need to reset the heredoc cache???
            (?====================================================================================================================================================================================================================================================================)

            # Do we need to cache content lookahead for this heredoc???
            (?(?==============================================================================================================================================================================)

                # Lookahead to detect and remember trailing contents of heredoc
                (?=
                    [^\n]*+ \n                                   # Go to the end of the current line
                    (?==========)                                # Remember the start of the contents
                    (?==========================================)   # Skip earlier heredoc contents
                    (?>                                          # The heredoc contents consist of...
                        (?:
                            (?!
                                (?(?=========================) \h*+ )   # An indent (if it was a <<~)
                                \g{_heredoc_terminator}                 # The terminator
                                (?: \n | \z )                           # At an end-of-line
                            )
                            (?(<PPR_X_HD_nointerp>)
                                [^\n]*+ \n
                            |
                                [^\n\$\@]*+
                                (?:
                                    (?>
                                        (?===========================================)
                                        (?= \$ )  (?&PerlScalarAccess)
                                        (?===============================)
                                    |
                                        (?===========================================)
                                        (?= \@ )  (?&PerlArrayAccess)
                                        (?===============================)
                                    )
                                    [^\n\$\@]*+
                                )*+
                                \n (?==========================================)
                            )
                        )*+

                        (?(?=========================) \h*+ )            # An indent (if it was a <<~)
                        \g{_heredoc_terminator}                          # The specified terminator
                        (?: \n | \z )                                    # Followed by EOL
                    )

                    # Then memoize the skip for when it's subsequently needed by PerlOWS or PerlNWS...
                    (?===============================================================================================================================================================================================================================================================================================================================================================================)
                )
            )

    )) # End of rule

        (?<PerlQuotelikeQ>   (?<PerlStdQuotelikeQ>
            (?>
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                \b q \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQQ>   (?<PerlStdQuotelikeQQ>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                \b qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            )
    )) # End of rule

        (?<PerlQuotelikeQW>   (?<PerlStdQuotelikeQW>
            (?>
                qw \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQX>   (?<PerlStdQuotelikeQX>
            (?>
                `  [^`]*+  (?: \\. [^`]*+ )*+  `
            |
                qx
                    (?>
                        (?= (?>(?&PerlOWS)) ' )
                        (?&PPR_X_quotelike_body)
                    |
                        \b (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                        (?&PPR_X_quotelike_body_interpolated)
                    )
            )
    )) # End of rule

        (?<PerlQuotelikeS>   (?<PerlStdQuotelikeS>
        (?<PerlSubstitution>   (?<PerlStdSubstitution>
            s \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{]                 # )
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_regex_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Single-quoted syntax...
                (?= (?>(?&PerlOWS)) ' )
                (?>(?&PPR_X_regex_body_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Delimited syntax...
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            )
            [msixpodualgcern]*+
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeTR>   (?<PerlStdQuotelikeTR>
        (?<PerlTransliteration>   (?<PerlStdTransliteration>
            (?> tr | y ) \b
            (?! (?>(?&PerlOWS)) => )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{\«]                 # )]
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_quotelike_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Delimited syntax...
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            )
            [cdsr]*+
    )) # End of rule
    )) # End of rule

        (?<PerlContextualQuotelikeM>   (?<PerlStdContextualQuotelikeM>
        (?<PerlContextualMatch>   (?<PerlStdContextualMatch>
            (?<PerlQuotelikeM>
            (?<PerlMatch>
                (?>
                    \/\/
                |
                    (?>
                        m (?= [#] )
                    |
                        m \b
                        (?! (?>(?&PerlOWS)) => )
                    |
                        (?= \/ [^/] )
                    )
                    (?&PPR_X_regex_body_interpolated)
                )
                [msixpodualgcn]*+
            ) # End of rule (?<PerlMatch>)
            ) # End of rule (?<PerlQuotelikeM>)
            (?=
                (?>(?&PerlOWS))
                (?> \z | [,;\}\])?] | => | : (?! :)
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeQR>   (?<PerlStdQuotelikeQR>
            qr \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>(?&PPR_X_regex_body_interpolated))
            [msixpodualn]*+
    )) # End of rule

        (?<PerlRegex>   (?<PerlStdRegex>
            (?>
                (?&PerlMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule

        (?<PerlContextualRegex>   (?<PerlStdContextualRegex>
            (?>
                (?&PerlContextualMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule


        (?<PerlBuiltinFunction>   (?<PerlStdBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?=[^\W\d]) # Skip if possible
            (?>
                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(?>at|udy)|leep|rand|qrt|ay|in)
                | 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)
                | r(?>e(?>ad(?>lin[ek]|pipe|dir)?|(?>quir|vers|nam)e|winddir|turn|set|cv|do|f)|index|mdir|and)
                | c(?>h(?>o(?>m?p|wn)|r(?>oot)?|dir|mod)|o(?>n(?>tinue|nect)|s)|lose(?>dir)?|aller|rypt)
                | e(?>nd(?>(?>hos|ne)t|p(?>roto|w)|serv|gr)ent|x(?>i(?>sts|t)|ec|p)|ach|val(?>bytes)?+|of)
                | l(?>o(?>c(?>al(?>time)?|k)|g)|i(?>sten|nk)|(?>sta|as)t|c(?>first)?|ength)
                | u(?>n(?>(?>lin|pac)k|shift|def|tie)|c(?>first)?|mask|time)
                | p(?>r(?>ototype|intf?)|ack(?>age)?|o[ps]|ipe|ush)
                | d(?>bm(?>close|open)|e(?>fined|lete)|ump|ie|o)
                | f(?>or(?>m(?>line|at)|k)|ileno|cntl|c|lock)
                | t(?>i(?>mes?|ed?)|ell(?>dir)?|runcate)
                | w(?>a(?>it(?>pid)?|ntarray|rn)|rite)
                | m(?>sg(?>ctl|get|rcv|snd)|kdir|ap)
                | b(?>in(?>mode|d)|less|reak)
                | i(?>n(?>dex|t)|mport|octl)
                | a(?>ccept|larm|tan2|bs)
                | o(?>pen(?>dir)?|ct|rd)
                | v(?>alues|ec)
                | k(?>eys|ill)
                | quotemeta
                | join
                | next
                | hex
                | _
            )
            \b
    )) # End of rule

        (?<PerlNullaryBuiltinFunction>   (?<PerlStdNullaryBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?= [^\W\d] )  # Skip if possible
            (?>
                get(?:(?:(?:hos|ne)t|serv|gr)ent|p(?:(?:roto|w)ent|pid)|login)
                | end(?:(?:hos|ne)t|p(?:roto|w)|serv|gr)ent
                | wa(?:ntarray|it)
                | times?
                | fork
                | _
            )
            \b
    )) # End of rule

        (?<PerlVersionNumber>   (?<PerlStdVersionNumber>
            (?>
                (?&PerlVString)
            |
                (?>(?&PPR_X_digit_seq))
                (?: \. (?&PPR_X_digit_seq)?+ )*+
            )
    )) # End of rule

        (?<PerlVString>   (?<PerlStdVString>
            v  (?>(?&PPR_X_digit_seq))  (?: \. (?&PPR_X_digit_seq) )*+
    )) # End of rule

        (?<PerlNumber>   (?<PerlStdNumber>
            [+-]?+
            (?>
                0  (?>  x   (?&PPR_X_x_digit_seq)
                |       b   (?&PPR_X_b_digit_seq)
                |       o?  (?&PPR_X_o_digit_seq)
                )
            |
                (?>
                        (?>(?&PPR_X_digit_seq))
                    (?: \. (?&PPR_X_digit_seq)?+ )?+
                |
                        \. (?&PPR_X_digit_seq)
                )
                (?: [eE] [+-]?+ (?&PPR_X_digit_seq) )?+
            )
    )) # End of rule

        (?<PerlOldQualifiedIdentifier>   (?<PerlStdOldQualifiedIdentifier>
            (?> (?> :: | ' ) \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlQualifiedIdentifier>   (?<PerlStdQualifiedIdentifier>
            (?>     ::       \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlIdentifier>   (?<PerlStdIdentifier>
                                    [^\W\d]\w*+
    )) # End of rule

        (?<PerlBareword>   (?<PerlStdBareword>
            (?! (?> (?= \w )
                    (?> for(?:each)?+ | while | if      | unless | until | use | no
                    |   given         | when  | sub     | return | my    | our | state
                    |   try           | catch | finally | defer
                    )
                |   (?&PPR_X_named_op)
                |   __ (?> END | DATA ) __ \b
                ) \b
                (?! (?>(?&PerlOWS)) => )
            )
            (?! (?> q[qwrx]?+ | [mys] | tr ) \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            )
            (?: :: )?+
            [^\W\d]\w*+
            (?: (?: :: | ' )  [^\W\d]\w*+  )*+
            (?: :: )?+
            (?! \( )    # )
        |
            :: (?! \w | \{ )
    )) # End of rule

        (?<PerlKeyword>   (?<PerlStdKeyword>
            (?!)    # None, by default, but can be overridden in a composing regex
    )) # End of rule

        (?<PerlPodSequence>   (?<PerlStdPodSequence>
            (?>(?&PerlOWS))  (?: (?>(?&PerlPod))  (?&PerlOWS) )*+
    )) # End of rule

        (?<PerlPod>   (?<PerlStdPod>
            ^ = [^\W\d]\w*+             # A line starting with =<identifier>
            .*?                         # Up to the first...
            (?>
                ^ = cut \b [^\n]*+ $    # ...line starting with =cut
            |                           # or
                \z                      # ...EOF
            )
    )) # End of rule


        ##### Whitespace matching (part of API) #################################

        (?<PerlOWSOrEND>   (?<PerlStdOWSOrEND>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            |
                __ (?> END | DATA ) __ \b .*+ \z
            )*+
    )) # End of rule

        (?<PerlOWS>   (?<PerlStdOWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )*+
    )) # End of rule

        (?<PerlNWS>   (?<PerlStdNWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )++
    )) # End of rule

        (?<PerlEndOfLine>   (?<PerlStdEndOfLine>
            \n
    )) # End of rule


        ###### Internal components (not part of API) ##########################

        (?<PPR_X_named_op>
            (?> cmp
            |   [lg][te]
            |   eq
            |   ne
            |   and
            |   or
            |   xor
            )
        ) # End of rule (?<PPR_X_named_op>)

        (?<PPR_X_non_reserved_identifier>
            (?! (?>
                   for(?:each)?+ | while   | if    | unless | until | given | when | default
                |  sub | format  | use     | no    | my     | our   | state
                |  try | catch   | finally | defer
                |  (?&PPR_X_named_op)
                |  [msy] | q[wrxq]?+ | tr
                |   __ (?> END | DATA ) __
                )
                \b
            )
            (?>(?&PerlQualifiedIdentifier))
            (?! :: )
        ) # End of rule (?<PPR_X_non_reserved_identifier>)

        (?<PPR_X_three_part_list>
            \(  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            \)
        ) # End of rule (?<PPR_X_three_part_list>)

        (?<PPR_X_indirect_obj>
            (?&PerlBareword)
        |
            (?>(?&PerlVariableScalar))
            (?! (?>(?&PerlOWS)) (?> [<\[\{] | -> ) )
        ) # End of rule (?<PPR_X_indirect_obj>)

        (?<PPR_X_quotelike_body>
            (?>(?&PPR_X_quotelike_body_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body>)

        (?<PPR_X_balanced_parens>
            [^)(\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^)(\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens>)

        (?<PPR_X_balanced_curlies>
            [^\}\{\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^\}\{\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies>)

        (?<PPR_X_balanced_squares>
            [^][\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?&PPR_X_balanced_squares)  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^][\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares>)

        (?<PPR_X_balanced_angles>
            [^><\\\n]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^><\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles>)

        (?<PPR_X_balanced_unicode_delims>
            (?============================)* <-- HERE +
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                (?============================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims>)

        (?<PPR_X_regex_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))            (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))            (?= \] )
                |
                    \(  (?>
                            \?{1,2}+ (?= \{ )
                            (?>(?&PerlBlock))
                        |
                            (?! \?{1,2}+ \{ )
                            (?>(?&PPR_X_balanced_parens))
                        )                                       (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))              (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_regex_body_unclosed>)

        (?<PPR_X_quotelike_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))        (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))        (?= \] )
                |
                    \(  (?>(?&PPR_X_balanced_parens))         (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))          (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_quotelike_body_unclosed>)

        (?<PPR_X_quotelike_body_interpolated>
            (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated>)

        (?<PPR_X_regex_body_interpolated>
            (?>(?&PPR_X_regex_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_regex_body_interpolated>)

        (?<PPR_X_balanced_parens_regex_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_regex_interpolated>)

        (?<PPR_X_balanced_curlies_regex_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_regex_interpolated>)

        (?<PPR_X_balanced_squares_regex_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\](|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\](|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_regex_interpolated>)

        (?<PPR_X_balanced_angles_regex_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_regex_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_regex_interpolated>)


        (?<PPR_X_balanced_unicode_delims_regex_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=======================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?========================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlScalarAccessNoSpace)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_regex_interpolated>)


        (?<PPR_X_balanced_parens_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_interpolated>)

        (?<PPR_X_balanced_curlies_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_interpolated>)

        (?<PPR_X_balanced_squares_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\]] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\]] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_interpolated>)

        (?<PPR_X_balanced_unicode_delims_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! \s | (?======================) ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! \s | (?======================) ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_interpolated>)

        (?<PPR_X_balanced_angles_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_interpolated>)

        (?<PPR_X_regex_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#|()] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#|()] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_regex_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s|()-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s|()-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_regex_body_unclosed)
        ) # End of rule (?<PPR_X_regex_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_quotelike_body_unclosed)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_s_e_check>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body_interpolated)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check>)

        (?<PPR_X_quotelike_s_e_check_uninterpolated>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check_uninterpolated>)

        (?<PPR_X_filetest_name>   [ABCMORSTWXbcdefgkloprstuwxz]          )

        (?<PPR_X_digit_seq>               \d++ (?: _?+         \d++ )*+  )
        (?<PPR_X_x_digit_seq>     [\da-fA-F]++ (?: _?+ [\da-fA-F]++ )*+  )
        (?<PPR_X_o_digit_seq>          [0-7]++ (?: _?+      [0-7]++ )*+  )
        (?<PPR_X_b_digit_seq>          [0-1]++ (?: _?+      [0-1]++ )*+  )

        (?<PPR_X_newline_and_heredoc>
            \n (?===================================================================================================)
        ) # End of rule (?<PPR_X_newline_and_heredoc>)
    )
    # END OF GRAMMAR
)/ at (eval 33) line 2196.
# Tests were run but no plan was declared and done_testing() was not seen.
# Looks like your test exited with 255 just after 1.
t/simple.t ...................... 
Dubious, test returned 255 (wstat 65280, 0xff00)
All 1 subtests passed 
(?============================)* matches null string many times in regex; marked by <-- HERE in m/(?(DEFINE)

(?<PerlRolesList>(?<PerlStdRolesList>
    (?&PerlQualifiedIdentifier)
    (?: (?&PerlOWS) , (?&PerlOWS) (?&PerlQualifiedIdentifier) )*?
  ))
(?<PerlKeyword>(?<PerlWrapperKeyword_002>(?&PerlBabbleInnerMatch)|(?&PerlWrapperKeyword_001)))
(?<PerlWrapperKeyword_001>(?&PerlClassDef)|(?&PerlStdKeyword))
(?<PerlClassRoles>(?<PerlStdClassRoles>
    with (?&PerlOWS) (?&PerlRolesList)
  ))
(?<PerlClassExtends>(?<PerlStdClassExtends>
    extends (?&PerlOWS) (?&PerlQualifiedIdentifier)
  ))
(?<PerlClassDef>(?<PerlStdClassDef>
    class (?&PerlOWS) (?&PerlQualifiedIdentifier)
    (?: (?&PerlOWS) (?&PerlClassExtends) )?
    (?: (?&PerlOWS) (?&PerlClassRoles) )?
    (?&PerlOWS)
    (?&PerlBlock)
  ))
(?<PerlBabbleInnerMatch>(?<PerlWrapperBabbleInnerMatch_001>((?&PerlStdBabbleInnerMatch))(?================================================================)))
(?<PerlStdBabbleInnerMatch>class(?&PerlOWS)(?&PerlQualifiedIdentifier)(?: (?&PerlOWS) (?&PerlClassExtends) )?(?: (?&PerlOWS) (?&PerlClassRoles) )?(?&PerlOWS)(?&PerlBlock))

) (?^umsx:
    (?(DEFINE)

        (?<PerlEntireDocument>   (?<PerlStdEntireDocument>
            \A
            (?&PerlDocument)
            (?:
                \Z
            |
                (?(?===========================)
                    (?>(?&PerlOWSOrEND))  (?=======)  ([^\n]++)
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlDocument>   (?<PerlStdDocument>
            \x{FEFF}?+                      # Optional BOM marker
            (?&PerlStatementSequence)
            (?&PerlOWSOrEND)
    )) # End of rule

        (?<PerlStatementSequence>   (?<PerlStdStatementSequence>
            (?>(?&PerlPodSequence))
            (?:
                (?&PerlStatement)
                (?&PerlPodSequence)
            )*+
    )) # End of rule

        (?<PerlStatement>   (?<PerlStdStatement>
            (?>
                (?>(?&PerlPodSequence))
                (?: (?>(?&PerlLabel)) (?&PerlOWSOrEND) )?+
                (?>(?&PerlPodSequence))
                (?>
                    (?&PerlKeyword)
                |
                    (?&PerlSubroutineDeclaration)
                |
                    (?&PerlUseStatement)
                |
                    (?&PerlPackageDeclaration)
                |
                    (?&PerlControlBlock)
                |
                    (?&PerlFormat)
                |
                    (?>(?&PerlExpression))          (?>(?&PerlOWS))
                    (?&PerlStatementModifier)?+     (?>(?&PerlOWSOrEND))
                    (?> ; | (?= \} | \z ))
                |
                    (?&PerlBlock)
                |
                    ;
                )

            | # A yada-yada...
                \.\.\. (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just a label...
                (?>(?&PerlLabel)) (?>(?&PerlOWSOrEND))
                (?> ; | (?= \} | \z ))

            | # Just an empty statement...
                (?>(?&PerlOWS)) ;

            | # An error (report it, if it's the first)...
                (?(?===========================)
                    (?> (?&PerlOWS) )
                    (?! (?: \} | \z ) )
                    (?=========)
                    ( (?&PerlExpression) (?&PerlOWS) [^\n]++ | [^;\}]++ )
                    (?=======================================================================================)
                    (?!)
                )
            )
    )) # End of rule

        (?<PerlSubroutineDeclaration>   (?<PerlStdSubroutineDeclaration>
        (?>
            (?: (?> my | our | state ) \b      (?>(?&PerlOWS)) )?+
            sub \b                             (?>(?&PerlOWS))
            (?>(?&PerlOldQualifiedIdentifier))    (?&PerlOWS)
        |
            AUTOLOAD                              (?&PerlOWS)
        |
            DESTROY                               (?&PerlOWS)
        )
        (?:
            # Perl pre 5.028
            (?:
                (?>
                    (?&PerlSignature)    # Parameter list
                |
                    \( [^)]*+ \)         # Prototype (
                )
                (?&PerlOWS)
            )?+
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
        |
            # Perl post 5.028
            (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
        )
        (?> ; | (?&PerlBlock) )
    )) # End of rule

        (?<PerlSignature>   (?<PerlStdSignature>
            \(
                (?>(?&PerlOWS))
                (?&PerlParameterDeclaration)*+
            \)
    )) # End of rule

        (?<PerlParameterDeclaration>   (?<PerlStdParameterDeclaration>
            (?:
                    \$  (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)?+ (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableScalar) (?>(?&PerlOWS))
                (?: =   (?>(?&PerlOWS))  (?&PerlConditionalExpression)   (?>(?&PerlOWS)) )?+
            |
                (?&PerlVariableArray) (?>(?&PerlOWS))
            |
                (?&PerlVariableHash)  (?>(?&PerlOWS))
            )
            (?: , (?>(?&PerlOWS))  |  (?= \) ) )     # (
    )) # End of rule


        (?<PerlUseStatement>   (?<PerlStdUseStatement>
        (?: use | no ) (?>(?&PerlNWS))
        (?>
            (?&PerlVersionNumber)
        |
            (?>(?&PerlQualifiedIdentifier))
            (?: (?>(?&PerlNWS)) (?&PerlVersionNumber)
                (?! (?>(?&PerlOWS)) (?> (?&PerlInfixBinaryOperator) | (?&PerlComma) | \? ) )
            )?+
            (?: (?>(?&PerlNWS)) (?&PerlPodSequence) )?+
            (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        )
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlReturnExpression>   (?<PerlStdReturnExpression>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
    )) # End of rule

        (?<PerlReturnStatement>   (?<PerlStdReturnStatement>
        return \b (?: (?>(?&PerlOWS)) (?&PerlExpression) )?+
        (?>(?&PerlOWSOrEND)) (?> ; | (?= \} | \z ))
    )) # End of rule

        (?<PerlPackageDeclaration>   (?<PerlStdPackageDeclaration>
        package
            (?>(?&PerlNWS)) (?>(?&PerlQualifiedIdentifier))
        (?: (?>(?&PerlNWS)) (?&PerlVersionNumber) )?+
            (?>(?&PerlOWSOrEND)) (?> ; | (?&PerlBlock) | (?= \} | \z ))
    )) # End of rule

        (?<PerlExpression>   (?<PerlStdExpression>
                                (?>(?&PerlLowPrecedenceNotExpression))
            (?: (?>(?&PerlOWS)) (?>(?&PerlLowPrecedenceInfixOperator))
                (?>(?&PerlOWS))    (?&PerlLowPrecedenceNotExpression)  )*+
    )) # End of rule

        (?<PerlLowPrecedenceNotExpression>   (?<PerlStdLowPrecedenceNotExpression>
            (?: not \b (?&PerlOWS) )*+  (?&PerlCommaList)
    )) # End of rule

        (?<PerlCommaList>   (?<PerlStdCommaList>
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            (?:
                (?: (?>(?&PerlComma))          (?&PerlOWS)   )++
                    (?>(?&PerlAssignment))  (?>(?&PerlOWS))
            )*+
                (?: (?>(?&PerlComma))          (?&PerlOWSOrEND)   )*+
    )) # End of rule

        (?<PerlAssignment>   (?<PerlStdAssignment>
                                (?>(?&PerlConditionalExpression))
            (?:
                (?>(?&PerlOWS)) (?>(?&PerlAssignmentOperator))
                (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )*+
    )) # End of rule

        (?<PerlScalarExpression>   (?<PerlStdScalarExpression>
        (?<PerlConditionalExpression>   (?<PerlStdConditionalExpression>
            (?>(?&PerlBinaryExpression))
            (?:
                (?>(?&PerlOWS)) \? (?>(?&PerlOWS)) (?>(?&PerlAssignment))
                (?>(?&PerlOWS))  : (?>(?&PerlOWS))    (?&PerlConditionalExpression)
            )?+
    )) # End of rule
    )) # End of rule

        (?<PerlBinaryExpression>   (?<PerlStdBinaryExpression>
                                (?>(?&PerlPrefixPostfixTerm))
            (?: (?>(?&PerlOWS)) (?>(?&PerlInfixBinaryOperator))
                (?>(?&PerlOWS))    (?&PerlPrefixPostfixTerm) )*+
    )) # End of rule

        (?<PerlPrefixPostfixTerm>   (?<PerlStdPrefixPostfixTerm>
            (?: (?>(?&PerlPrefixUnaryOperator))  (?&PerlOWS) )*+
            (?>(?&PerlTerm))
            (?: (?>(?&PerlOWS)) (?&PerlPostfixUnaryOperator) )?+
    )) # End of rule

        (?<PerlLvalue>   (?<PerlStdLvalue>
            (?>
                \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier)
            |
                \(                                                                     (?>(?&PerlOWS))
                    (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )      (?>(?&PerlOWS))
                    (?:
                        (?>(?&PerlComma))                                              (?>(?&PerlOWS))
                        (?> \\?+ [\$\@%] (?>(?&PerlOWS)) (?&PerlIdentifier) | undef )  (?>(?&PerlOWS))
                    )*+
                    (?: (?>(?&PerlComma)) (?&PerlOWS) )?+
                \)
            )
    )) # End of rule

        (?<PerlTerm>   (?<PerlStdTerm>
            (?>
                (?&PerlReturnExpression)

            # The remaining alternatives can all take postfix dereferencers...
            | (?:
                    (?= \$ )  (?&PerlScalarAccess)
              |
                    (?= \@ )  (?&PerlArrayAccess)
              |
                    (?=  % )  (?&PerlHashAccess)
              |
                    (?&PerlAnonymousSubroutine)
              |
                    (?>(?&PerlNullaryBuiltinFunction))  (?! (?>(?&PerlOWS)) \( )
              |
                    (?&PerlDoBlock) | (?&PerlEvalBlock)
              |
                    (?&PerlCall)
              |
                    (?&PerlVariableDeclaration)
              |
                    (?&PerlTypeglob)
              |
                    (?>(?&PerlParenthesesList))

                    # Can optionally do a [...] lookup straight after the parens,
                    # followd by any number of other look-ups
                    (?:
                        (?>(?&PerlOWS)) (?&PerlArrayIndexer)
                        (?:
                            (?>(?&PerlOWS))
                            (?>
                                (?&PerlArrayIndexer)
                            |   (?&PerlHashIndexer)
                            |   (?&PerlParenthesesList)
                            )
                        )*+
                    )?+
              |
                    (?&PerlAnonymousArray)
              |
                    (?&PerlAnonymousHash)
              |
                    (?&PerlDiamondOperator)
              |
                    (?&PerlContextualMatch)
              |
                    (?&PerlQuotelikeS)
              |
                    (?&PerlQuotelikeTR)
              |
                    (?&PerlQuotelikeQX)
              |
                    (?&PerlLiteral)
              )

              (?: (?&PerlTermPostfixDereference) )?+
            )
    )) # End of rule

        (?<PerlTermPostfixDereference>   (?<PerlStdTermPostfixDereference>
            # Must have at least one arrowed dereference...
            (?:
                (?>(?&PerlOWS)) -> (?>(?&PerlOWS))
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?>  (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    (?:
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
                    )*+

                |   # A method call...
                    (?> (?&PerlQualifiedIdentifier) | (?! \$\#\* ) (?&PerlVariableScalar) )
                    (?: (?>(?&PerlOWS)) (?&PerlParenthesesList) )?+

                |   # An array or hash slice or k/v slice
                    # (provided it's not subsequently dereferenced)
                    [\@%] (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS))  [\@%]?+  [\[\{] )

                |   # An array max-index lookup...
                    \$\#\*

                |   # A scalar-, glob-, or subroutine dereference...
                    [\$*&] \*

                |   # An array dereference (provided it's not subsequently dereferenced)...
                    \@\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\[\@] )

                |   # A hash dereference (provided it's not subsequently dereferenced)...
                    \%\*
                    (?! (?>(?&PerlOWS)) -> (?>(?&PerlOWS)) [\{%] )

                |   # A glob lookup...
                    \* (?&PerlHashIndexer)
                )
            )++
    )) # End of rule

        (?<PerlControlBlock>   (?<PerlStdControlBlock>
            (?> # Conditionals...
                (?> if | unless ) \b                 (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))          (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    elsif \b                         (?>(?&PerlOWS))
                    (?>(?&PerlParenthesesList))      (?>(?&PerlOWS))
                    (?&PerlBlock)
                )*+

                (?:
                                                    (?>(?&PerlOWS))
                    (?>(?&PerlPodSequence))
                    else \b                          (?>(?&PerlOWS))
                    (?&PerlBlock)
                )?+

            |   # Loops...
                (?>
                    for(?:each)?+ \b
                    (?>(?&PerlOWS))
                    (?:
                        (?> # Explicitly aliased iterator variable...
                            (?> \\ (?>(?&PerlOWS))  (?> my | our | state )
                            |                       (?> my | our | state )  (?>(?&PerlOWS)) \\
                            )
                            (?>(?&PerlOWS))
                            (?> (?&PerlVariableScalar)
                            |   (?&PerlVariableArray)
                            |   (?&PerlVariableHash)
                            )
                        |
                            # List of scalar iterator variables...
                            my                                   (?>(?&PerlOWS))
                            \(                                   (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                (?: ,                            (?>(?&PerlOWS))
                                    (?>(?&PerlVariableScalar))   (?>(?&PerlOWS))
                                )*+
                                (?: ,                            (?>(?&PerlOWS)) )?+
                            \)

                        |
                            # Implicitly aliased iterator variable...
                            (?> (?: my | our | state ) (?>(?&PerlOWS)) )?+
                            (?&PerlVariableScalar)
                        )?+
                        (?>(?&PerlOWS))
                        (?> (?&PerlParenthesesList) | (?&PerlQuotelikeQW) )
                    |
                        (?&PPR_X_three_part_list)
                    )
                |
                    (?> while | until) \b (?>(?&PerlOWS))
                    (?&PerlParenthesesList)
                )

                (?>(?&PerlOWS))
                (?>(?&PerlBlock))

                (?:
                    (?>(?&PerlOWS))   continue
                    (?>(?&PerlOWS))   (?&PerlBlock)
                )?+

            | # Phasers...
                (?> BEGIN | END | CHECK | INIT | UNITCHECK ) \b   (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Try/catch/finallys...
                (?>(?&PerlTryCatchFinallyBlock))

            | # Defers...
                defer                                     (?>(?&PerlOWS))
                (?&PerlBlock)

            | # Switches...
                (?> given | when ) \b                     (?>(?&PerlOWS))
                (?>(?&PerlParenthesesList))               (?>(?&PerlOWS))
                (?&PerlBlock)
            |
                default                                   (?>(?&PerlOWS))
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlFormat>   (?<PerlStdFormat>
            format
            (?: (?>(?&PerlNWS))  (?&PerlQualifiedIdentifier)  )?+
                (?>(?&PerlOWS))  = [^\n]*+
                (?&PPR_X_newline_and_heredoc)
            (?:
                (?! \. \n )
                [^\n\$\@]*+
                (?:
                    (?>
                        (?= \$ (?! \s ) )  (?&PerlScalarAccessNoSpace)
                    |
                        (?= \@ (?! \s ) )  (?&PerlArrayAccessNoSpace)
                    )
                    [^\n\$\@]*+
                )*+
                (?&PPR_X_newline_and_heredoc)
            )*+
            \. (?&PerlEndOfLine)
    )) # End of rule

        (?<PerlStatementModifier>   (?<PerlStdStatementModifier>
            (?> if | for(?:each)?+ | while | unless | until | when )
            \b
            (?>(?&PerlOWS))
            (?&PerlExpression)
    )) # End of rule

        (?<PerlBlock>   (?<PerlStdBlock>
            \{  (?>(?&PerlStatementSequence))  \}
    )) # End of rule

        (?<PerlCall>   (?<PerlStdCall>
            (?>
                [&]                                    (?>(?&PerlOWS))
                (?> (?&PerlBlock)
                |   (?&PerlVariableScalar)
                |   (?&PerlQualifiedIdentifier)
                )                                      (?>(?&PerlOWS))
                (?:
                    \(                                 (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))        (?&PerlOWS)   )?+
                    \)
                )?+
            |
                - (?>(?&PPR_X_filetest_name))            (?>(?&PerlOWS))
                (?&PerlPrefixPostfixTerm)?+
            |
                (?>(?&PerlBuiltinFunction))            (?>(?&PerlOWS))
                (?>
                    \(                                 (?>(?&PerlOWS))
                        (?>
                            (?= (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlExpression)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlExpression)
                        |
                            (?&PerlExpression)?+
                        )                              (?>(?&PerlOWS))
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))          (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))   (?>(?&PerlNWS))
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            |
                (?>(?&PPR_X_non_reserved_identifier)) (?>(?&PerlOWS))
                (?>
                    \(                              (?>(?&PerlOWS))
                        (?: (?>(?&PerlExpression))     (?&PerlOWS)  )?+
                    \)
                |
                        (?>
                            (?=
                                (?>(?&PPR_X_non_reserved_identifier))
                                (?>(?&PerlOWS))
                                (?! \( | (?&PerlComma) )
                            )
                            (?&PerlCall)
                        |
                            (?>(?&PerlBlock))           (?>(?&PerlOWS))
                            (?&PerlCommaList)?+
                        |
                            (?>(?&PPR_X_indirect_obj))        (?&PerlNWS)
                            (?&PerlCommaList)
                        |
                            (?&PerlCommaList)?+
                        )
                )
            )
    )) # End of rule

        (?<PerlVariableDeclaration>   (?<PerlStdVariableDeclaration>
            (?> my | our | state ) \b           (?>(?&PerlOWS))
            (?: (?&PerlQualifiedIdentifier)        (?&PerlOWS)  )?+
            (?>(?&PerlLvalue))                  (?>(?&PerlOWS))
            (?&PerlAttributes)?+
    )) # End of rule

        (?<PerlDoBlock>   (?<PerlStdDoBlock>
            do (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlEvalBlock>   (?<PerlStdEvalBlock>
            eval (?>(?&PerlOWS)) (?&PerlBlock)
    )) # End of rule

        (?<PerlTryCatchFinallyBlock>   (?<PerlStdTryCatchFinallyBlock>

                try \b                                (?>(?&PerlOWS))
                (?>(?&PerlBlock))
                                                      (?>(?&PerlOWS))
                catch \b                              (?>(?&PerlOWS))
                \(  (?>(?&PerlVariableScalar))  \)    (?>(?&PerlOWS))
                (?>(?&PerlBlock))

            (?:
                                                      (?>(?&PerlOWS))
                finally \b                            (?>(?&PerlOWS))
                (?>(?&PerlBlock))
            )?+
    )) # End of rule

        (?<PerlAttributes>   (?<PerlStdAttributes>
            :
            (?>(?&PerlOWS))
            (?>(?&PerlIdentifier))
            (?:
                (?= \( ) (?&PPR_X_quotelike_body)
            )?+

            (?:
                (?> (?>(?&PerlOWS)) : (?&PerlOWS) | (?&PerlNWS) )
                (?>(?&PerlIdentifier))
                (?:
                    (?= \( ) (?&PPR_X_quotelike_body)
                )?+
            )*+
    )) # End of rule

        (?<PerlList>   (?<PerlStdList>
            (?> (?&PerlParenthesesList) | (?&PerlCommaList) )
    )) # End of rule

        (?<PerlParenthesesList>   (?<PerlStdParenthesesList>
            \(  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \)
    )) # End of rule

        (?<PerlAnonymousArray>   (?<PerlStdAnonymousArray>
            \[  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+  \]
    )) # End of rule

        (?<PerlAnonymousHash>   (?<PerlStdAnonymousHash>
            \{  (?>(?&PerlOWS))  (?: (?>(?&PerlExpression)) (?&PerlOWS) )?+ \}
    )) # End of rule

        (?<PerlArrayIndexer>   (?<PerlStdArrayIndexer>
            \[                          (?>(?&PerlOWS))
                (?>(?&PerlExpression))  (?>(?&PerlOWS))
            \]
    )) # End of rule

        (?<PerlHashIndexer>   (?<PerlStdHashIndexer>
            \{  (?>(?&PerlOWS))
                (?: -?+ (?&PerlIdentifier) | (?&PerlExpression) )  # (Note: MUST allow backtracking here)
                (?>(?&PerlOWS))
            \}
    )) # End of rule

        (?<PerlDiamondOperator>   (?<PerlStdDiamondOperator>
            <<>>    # Perl 5.22 "double diamond"
        |
            < (?! < )
                (?>(?&PPR_X_balanced_angles))
            >
            (?=
                (?>(?&PerlOWSOrEND))
                (?> \z | [,;\}\])?] | => | : (?! :)        # (
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule

        (?<PerlComma>   (?<PerlStdComma>
            (?> , | => )
    )) # End of rule

        (?<PerlPrefixUnaryOperator>   (?<PerlStdPrefixUnaryOperator>
            (?> \+\+ | -- | [!\\+~] | - (?! (?&PPR_X_filetest_name) \b ) )
    )) # End of rule

        (?<PerlPostfixUnaryOperator>   (?<PerlStdPostfixUnaryOperator>
            (?> \+\+  |  -- )
    )) # End of rule

        (?<PerlInfixBinaryOperator>   (?<PerlStdInfixBinaryOperator>
            (?>  [=!][~=]
            |    cmp
            |    <= >?+
            |    >=
            |    [lg][te]
            |    eq
            |    ne
            |    [+]             (?! [+=] )
            |     -              (?! [-=] )
            |    [.]{2,3}+
            |    [.%x]           (?! [=]  )
            |    [&|^][.]        (?! [=]  )
            |    [<>*&|/]{1,2}+  (?! [=]  )
            |    \^              (?! [=]  )
            |    ~~
            |    isa
            )
    )) # End of rule

        (?<PerlAssignmentOperator>   (?<PerlStdAssignmentOperator>
            (?:  [<>*&|/]{2}
            |  [-+.*/%x]
            |  [&|^][.]?+
            )?+
            =
            (?! > )
    )) # End of rule

        (?<PerlLowPrecedenceInfixOperator>   (?<PerlStdLowPrecedenceInfixOperator>
            (?> or | and | xor )
    )) # End of rule

        (?<PerlAnonymousSubroutine>   (?<PerlStdAnonymousSubroutine>
            sub \b
            (?>(?&PerlOWS))
            (?:
                # Perl pre 5.028
                (?:
                    (?>
                        (?&PerlSignature)    # Parameter list
                    |
                        \( [^)]*+ \)         # Prototype (
                    )
                    (?&PerlOWS)
                )?+
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
            |
                # Perl post 5.028
                (?: (?>(?&PerlAttributes))  (?&PerlOWS) )?+
                (?: (?>(?&PerlSignature))   (?&PerlOWS) )?+    # Parameter list
            )
            (?&PerlBlock)
    )) # End of rule

        (?<PerlVariable>   (?<PerlStdVariable>
            (?= [\$\@%] )
            (?>
                (?&PerlScalarAccess)
            |   (?&PerlHashAccess)
            |   (?&PerlArrayAccess)
            )
            (?> (?&PerlTermPostfixDereference) )?+
    )) # End of rule

        (?<PerlTypeglob>   (?<PerlStdTypeglob>
            \*
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier))  (?: :: )?+
            |
                (?&PerlVariableScalar)
            |
                [][!"#\$%&'()*+,./:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccess>   (?<PerlStdArrayAccess>
            (?>(?&PerlVariableArray))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlArrayAccessNoSpace>   (?<PerlStdArrayAccessNoSpace>
            (?>(?&PerlVariableArrayNoSpace))

            # Optional arrowless access(es) to begin
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any number of optional arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlArrayAccessNoSpaceNoArrow>   (?<PerlStdArrayAccessNoSpaceNoArrow>
            (?>(?&PerlVariableArray))
            (?:
                (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )
            )*+
    )) # End of rule

        (?<PerlHashAccess>   (?<PerlStdHashAccess>
            (?>(?&PerlVariableHash))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlScalarAccess>   (?<PerlStdScalarAccess>
            (?>(?&PerlVariableScalar))

            # Optional arrowless access(es) to begin (but can't start with a parens)...
            (?:
                (?! (?>(?&PerlOWS)) \( )
                (?:
                    (?>(?&PerlOWS))
                    (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+

            # Note: subsequent arrowed postdereferences that would follow here
            #       are handled at the <PerlTerm> level

    )) # End of rule

        (?<PerlScalarAccessNoSpace>   (?<PerlStdScalarAccessNoSpace>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) to begin...
            (?: (?&PerlArrayIndexer) | (?&PerlHashIndexer) )*+

            # Then any nuber of arrowed accesses
            # (this is an inlined subset of (?&PerlTermPostfixDereference))...
            (?:
                ->
                (?>
                    # A series of simple brackets can omit interstitial arrows...
                    (?:  (?&PerlArrayIndexer)
                    |    (?&PerlHashIndexer)
                    )++

                |   # An array or hash slice...
                    \@ (?> (?>(?&PerlArrayIndexer)) | (?>(?&PerlHashIndexer)) )
                )
            )*+

            # Followed by at most one of these terminal arrowed dereferences...
            (?:
                ->
                (?>
                    # An array or scalar deref...
                    [\@\$] \*

                |   # An array count deref...
                    \$ \# \*
                )
            )?+
    )) # End of rule

        (?<PerlScalarAccessNoSpaceNoArrow>   (?<PerlStdScalarAccessNoSpaceNoArrow>
            (?>(?&PerlVariableScalarNoSpace))

            # Optional arrowless access(es) (but parens can't be first)...
            (?:
                (?! \( )
                (?:
                    (?> (?&PerlArrayIndexer) | (?&PerlHashIndexer) | (?&PerlParenthesesList) )
                )++
            )?+
    )) # End of rule

        (?<PerlVariableScalar>   (?<PerlStdVariableScalar>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
                (?&PerlOWS)
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ [!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-] \}
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableScalarNoSpace>   (?<PerlStdVariableScalarNoSpace>
            \$\$
            (?! [\$\{\w] )
        |
            (?:
                \$
                (?:
                    [#]
                    (?=  (?> [\$^\w\{:+] | - (?! > ) )  )
                )?+
            )++
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                \{ \w++ \}
            |
                (?&PerlBlock)
            )
        |
            \$\#
    )) # End of rule

        (?<PerlVariableArray>   (?<PerlStdVariableArray>
            \@     (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableArrayNoSpace>   (?<PerlStdVariableArrayNoSpace>
            \@
            (?: \$ )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlVariableHash>   (?<PerlStdVariableHash>
            %      (?>(?&PerlOWS))
            (?: \$    (?&PerlOWS)  )*+
            (?>
                \d++
            |
                \^ [][A-Z^_?\\]
            |
                \{ \^ [A-Z_] \w*+ \}
            |
                (?>(?&PerlOldQualifiedIdentifier)) (?: :: )?+
            |
                :: (?&PerlBlock)?+
            |
                [][!"#\$%&'()*+,.\\/:;<=>?\@\^`|~-]
            |
                (?&PerlBlock)
            )
    )) # End of rule

        (?<PerlLabel>   (?<PerlStdLabel>
            (?! (?> [msy] | q[wrxq]?+ | tr ) \b )
            (?>(?&PerlIdentifier))
            : (?! : )
    )) # End of rule

        (?<PerlLiteral>   (?<PerlStdLiteral>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlNumber)
            |   (?&PerlBareword)
            )
    )) # End of rule

        (?<PerlString>   (?<PerlStdString>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                (?: q \b | qq (?= (?>(?&PerlOWS)) ' ) )
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            |
                qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            |
                (?&PerlHeredoc)
            |
                (?&PerlVString)
            )
    )) # End of rule

        (?<PerlQuotelike>   (?<PerlStdQuotelike>
            (?> (?&PerlString)
            |   (?&PerlQuotelikeQR)
            |   (?&PerlQuotelikeQW)
            |   (?&PerlQuotelikeQX)
            |   (?&PerlContextualMatch)
            |   (?&PerlQuotelikeS)
            |   (?&PerlQuotelikeTR)
            )
    )) # End of rule

        (?<PerlHeredoc>   (?<PerlStdHeredoc>
            # Match the introducer...
            <<
            (?<_heredoc_indented> [~]?+ )

            # Match the terminator specification...
            (?>
                \\?+   (?<_heredoc_terminator>  (?&PerlIdentifier)              )
            |
                (?>(?&PerlOWS))
                (?>
                    "  (?<_heredoc_terminator>  [^"\\]*+  (?: \\. [^"\\]*+ )*+  )  "  #"
                |
                    (?<PPR_X_HD_nointerp> ' )
                    (?<_heredoc_terminator>  [^'\\]*+  (?: \\. [^'\\]*+ )*+  )  '  #'
                |
                    `  (?<_heredoc_terminator>  [^`\\]*+  (?: \\. [^`\\]*+ )*+  )  `  #`
                )
            |
                    (?<_heredoc_terminator>                                  )
            )

            # Do we need to reset the heredoc cache???
            (?====================================================================================================================================================================================================================================================================)

            # Do we need to cache content lookahead for this heredoc???
            (?(?==============================================================================================================================================================================)

                # Lookahead to detect and remember trailing contents of heredoc
                (?=
                    [^\n]*+ \n                                   # Go to the end of the current line
                    (?==========)                                # Remember the start of the contents
                    (?==========================================)   # Skip earlier heredoc contents
                    (?>                                          # The heredoc contents consist of...
                        (?:
                            (?!
                                (?(?=========================) \h*+ )   # An indent (if it was a <<~)
                                \g{_heredoc_terminator}                 # The terminator
                                (?: \n | \z )                           # At an end-of-line
                            )
                            (?(<PPR_X_HD_nointerp>)
                                [^\n]*+ \n
                            |
                                [^\n\$\@]*+
                                (?:
                                    (?>
                                        (?===========================================)
                                        (?= \$ )  (?&PerlScalarAccess)
                                        (?===============================)
                                    |
                                        (?===========================================)
                                        (?= \@ )  (?&PerlArrayAccess)
                                        (?===============================)
                                    )
                                    [^\n\$\@]*+
                                )*+
                                \n (?==========================================)
                            )
                        )*+

                        (?(?=========================) \h*+ )            # An indent (if it was a <<~)
                        \g{_heredoc_terminator}                          # The specified terminator
                        (?: \n | \z )                                    # Followed by EOL
                    )

                    # Then memoize the skip for when it's subsequently needed by PerlOWS or PerlNWS...
                    (?===============================================================================================================================================================================================================================================================================================================================================================================)
                )
            )

    )) # End of rule

        (?<PerlQuotelikeQ>   (?<PerlStdQuotelikeQ>
            (?>
                '  [^'\\]*+  (?: \\. [^'\\]*+ )*+ '
            |
                \b q \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQQ>   (?<PerlStdQuotelikeQQ>
            (?>
                "  [^"\\]*+  (?: \\. [^"\\]*+ )*+ "
            |
                \b qq \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body_interpolated)
            )
    )) # End of rule

        (?<PerlQuotelikeQW>   (?<PerlStdQuotelikeQW>
            (?>
                qw \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                (?&PPR_X_quotelike_body)
            )
    )) # End of rule

        (?<PerlQuotelikeQX>   (?<PerlStdQuotelikeQX>
            (?>
                `  [^`]*+  (?: \\. [^`]*+ )*+  `
            |
                qx
                    (?>
                        (?= (?>(?&PerlOWS)) ' )
                        (?&PPR_X_quotelike_body)
                    |
                        \b (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
                        (?&PPR_X_quotelike_body_interpolated)
                    )
            )
    )) # End of rule

        (?<PerlQuotelikeS>   (?<PerlStdQuotelikeS>
        (?<PerlSubstitution>   (?<PerlStdSubstitution>
            s \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{]                 # )
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_regex_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Single-quoted syntax...
                (?= (?>(?&PerlOWS)) ' )
                (?>(?&PPR_X_regex_body_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            |
                # Delimited syntax...
                (?>(?&PPR_X_regex_body_interpolated_unclosed))
                (?&PPR_X_quotelike_s_e_check)
                (?>(?&PPR_X_quotelike_body_interpolated))
            )
            [msixpodualgcern]*+
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeTR>   (?<PerlStdQuotelikeTR>
        (?<PerlTransliteration>   (?<PerlStdTransliteration>
            (?> tr | y ) \b
            (?! (?>(?&PerlOWS)) => )
            (?>
                # Hashed syntax...
                (?= [#] )
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Bracketed syntax...
                (?= (?>(?&PerlOWS))
                    (?: [\[(<\{\«]                 # )]
                    |   (\X) (?======================================================)
                    )
                )
                (?>(?&PPR_X_quotelike_body_interpolated))
                (?>(?&PerlOWS))
                (?&PPR_X_quotelike_body_interpolated)
            |
                # Delimited syntax...
                (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
                (?&PPR_X_quotelike_body_interpolated)
            )
            [cdsr]*+
    )) # End of rule
    )) # End of rule

        (?<PerlContextualQuotelikeM>   (?<PerlStdContextualQuotelikeM>
        (?<PerlContextualMatch>   (?<PerlStdContextualMatch>
            (?<PerlQuotelikeM>
            (?<PerlMatch>
                (?>
                    \/\/
                |
                    (?>
                        m (?= [#] )
                    |
                        m \b
                        (?! (?>(?&PerlOWS)) => )
                    |
                        (?= \/ [^/] )
                    )
                    (?&PPR_X_regex_body_interpolated)
                )
                [msixpodualgcn]*+
            ) # End of rule (?<PerlMatch>)
            ) # End of rule (?<PerlQuotelikeM>)
            (?=
                (?>(?&PerlOWS))
                (?> \z | [,;\}\])?] | => | : (?! :)
                |   (?&PerlInfixBinaryOperator) | (?&PerlLowPrecedenceInfixOperator)
                |   (?= \w) (?> for(?:each)?+ | while | if | unless | until | when )
                )
            )
    )) # End of rule
    )) # End of rule

        (?<PerlQuotelikeQR>   (?<PerlStdQuotelikeQR>
            qr \b
            (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            (?>(?&PPR_X_regex_body_interpolated))
            [msixpodualn]*+
    )) # End of rule

        (?<PerlRegex>   (?<PerlStdRegex>
            (?>
                (?&PerlMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule

        (?<PerlContextualRegex>   (?<PerlStdContextualRegex>
            (?>
                (?&PerlContextualMatch)
            |
                (?&PerlQuotelikeQR)
            )
    )) # End of rule


        (?<PerlBuiltinFunction>   (?<PerlStdBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?=[^\W\d]) # Skip if possible
            (?>
                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(?>at|udy)|leep|rand|qrt|ay|in)
                | 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)
                | r(?>e(?>ad(?>lin[ek]|pipe|dir)?|(?>quir|vers|nam)e|winddir|turn|set|cv|do|f)|index|mdir|and)
                | c(?>h(?>o(?>m?p|wn)|r(?>oot)?|dir|mod)|o(?>n(?>tinue|nect)|s)|lose(?>dir)?|aller|rypt)
                | e(?>nd(?>(?>hos|ne)t|p(?>roto|w)|serv|gr)ent|x(?>i(?>sts|t)|ec|p)|ach|val(?>bytes)?+|of)
                | l(?>o(?>c(?>al(?>time)?|k)|g)|i(?>sten|nk)|(?>sta|as)t|c(?>first)?|ength)
                | u(?>n(?>(?>lin|pac)k|shift|def|tie)|c(?>first)?|mask|time)
                | p(?>r(?>ototype|intf?)|ack(?>age)?|o[ps]|ipe|ush)
                | d(?>bm(?>close|open)|e(?>fined|lete)|ump|ie|o)
                | f(?>or(?>m(?>line|at)|k)|ileno|cntl|c|lock)
                | t(?>i(?>mes?|ed?)|ell(?>dir)?|runcate)
                | w(?>a(?>it(?>pid)?|ntarray|rn)|rite)
                | m(?>sg(?>ctl|get|rcv|snd)|kdir|ap)
                | b(?>in(?>mode|d)|less|reak)
                | i(?>n(?>dex|t)|mport|octl)
                | a(?>ccept|larm|tan2|bs)
                | o(?>pen(?>dir)?|ct|rd)
                | v(?>alues|ec)
                | k(?>eys|ill)
                | quotemeta
                | join
                | next
                | hex
                | _
            )
            \b
    )) # End of rule

        (?<PerlNullaryBuiltinFunction>   (?<PerlStdNullaryBuiltinFunction>
            # Optimized to match any Perl builtin name, without backtracking...
            (?= [^\W\d] )  # Skip if possible
            (?>
                get(?:(?:(?:hos|ne)t|serv|gr)ent|p(?:(?:roto|w)ent|pid)|login)
                | end(?:(?:hos|ne)t|p(?:roto|w)|serv|gr)ent
                | wa(?:ntarray|it)
                | times?
                | fork
                | _
            )
            \b
    )) # End of rule

        (?<PerlVersionNumber>   (?<PerlStdVersionNumber>
            (?>
                (?&PerlVString)
            |
                (?>(?&PPR_X_digit_seq))
                (?: \. (?&PPR_X_digit_seq)?+ )*+
            )
    )) # End of rule

        (?<PerlVString>   (?<PerlStdVString>
            v  (?>(?&PPR_X_digit_seq))  (?: \. (?&PPR_X_digit_seq) )*+
    )) # End of rule

        (?<PerlNumber>   (?<PerlStdNumber>
            [+-]?+
            (?>
                0  (?>  x   (?&PPR_X_x_digit_seq)
                |       b   (?&PPR_X_b_digit_seq)
                |       o?  (?&PPR_X_o_digit_seq)
                )
            |
                (?>
                        (?>(?&PPR_X_digit_seq))
                    (?: \. (?&PPR_X_digit_seq)?+ )?+
                |
                        \. (?&PPR_X_digit_seq)
                )
                (?: [eE] [+-]?+ (?&PPR_X_digit_seq) )?+
            )
    )) # End of rule

        (?<PerlOldQualifiedIdentifier>   (?<PerlStdOldQualifiedIdentifier>
            (?> (?> :: | ' ) \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlQualifiedIdentifier>   (?<PerlStdQualifiedIdentifier>
            (?>     ::       \w++  |  [^\W\d]\w*+ )  (?: (?> :: | ' )  \w++ )*+
    )) # End of rule

        (?<PerlIdentifier>   (?<PerlStdIdentifier>
                                    [^\W\d]\w*+
    )) # End of rule

        (?<PerlBareword>   (?<PerlStdBareword>
            (?! (?> (?= \w )
                    (?> for(?:each)?+ | while | if      | unless | until | use | no
                    |   given         | when  | sub     | return | my    | our | state
                    |   try           | catch | finally | defer
                    )
                |   (?&PPR_X_named_op)
                |   __ (?> END | DATA ) __ \b
                ) \b
                (?! (?>(?&PerlOWS)) => )
            )
            (?! (?> q[qwrx]?+ | [mys] | tr ) \b
                (?> (?= [#] ) | (?! (?>(?&PerlOWS)) => ) )
            )
            (?: :: )?+
            [^\W\d]\w*+
            (?: (?: :: | ' )  [^\W\d]\w*+  )*+
            (?: :: )?+
            (?! \( )    # )
        |
            :: (?! \w | \{ )
    )) # End of rule

        (?<PerlKeyword>   (?<PerlStdKeyword>
            (?!)    # None, by default, but can be overridden in a composing regex
    )) # End of rule

        (?<PerlPodSequence>   (?<PerlStdPodSequence>
            (?>(?&PerlOWS))  (?: (?>(?&PerlPod))  (?&PerlOWS) )*+
    )) # End of rule

        (?<PerlPod>   (?<PerlStdPod>
            ^ = [^\W\d]\w*+             # A line starting with =<identifier>
            .*?                         # Up to the first...
            (?>
                ^ = cut \b [^\n]*+ $    # ...line starting with =cut
            |                           # or
                \z                      # ...EOF
            )
    )) # End of rule


        ##### Whitespace matching (part of API) #################################

        (?<PerlOWSOrEND>   (?<PerlStdOWSOrEND>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            |
                __ (?> END | DATA ) __ \b .*+ \z
            )*+
    )) # End of rule

        (?<PerlOWS>   (?<PerlStdOWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )*+
    )) # End of rule

        (?<PerlNWS>   (?<PerlStdNWS>
            (?:
                \h++
            |
                (?&PPR_X_newline_and_heredoc)
            |
                [#] [^\n]*+
            )++
    )) # End of rule

        (?<PerlEndOfLine>   (?<PerlStdEndOfLine>
            \n
    )) # End of rule


        ###### Internal components (not part of API) ##########################

        (?<PPR_X_named_op>
            (?> cmp
            |   [lg][te]
            |   eq
            |   ne
            |   and
            |   or
            |   xor
            )
        ) # End of rule (?<PPR_X_named_op>)

        (?<PPR_X_non_reserved_identifier>
            (?! (?>
                   for(?:each)?+ | while   | if    | unless | until | given | when | default
                |  sub | format  | use     | no    | my     | our   | state
                |  try | catch   | finally | defer
                |  (?&PPR_X_named_op)
                |  [msy] | q[wrxq]?+ | tr
                |   __ (?> END | DATA ) __
                )
                \b
            )
            (?>(?&PerlQualifiedIdentifier))
            (?! :: )
        ) # End of rule (?<PPR_X_non_reserved_identifier>)

        (?<PPR_X_three_part_list>
            \(  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            ;  (?>(?&PerlOWS)) (?: (?>(?&PerlExpression)) (?&PerlOWS) )??
            \)
        ) # End of rule (?<PPR_X_three_part_list>)

        (?<PPR_X_indirect_obj>
            (?&PerlBareword)
        |
            (?>(?&PerlVariableScalar))
            (?! (?>(?&PerlOWS)) (?> [<\[\{] | -> ) )
        ) # End of rule (?<PPR_X_indirect_obj>)

        (?<PPR_X_quotelike_body>
            (?>(?&PPR_X_quotelike_body_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body>)

        (?<PPR_X_balanced_parens>
            [^)(\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^)(\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens>)

        (?<PPR_X_balanced_curlies>
            [^\}\{\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^\}\{\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies>)

        (?<PPR_X_balanced_squares>
            [^][\\\n]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?&PPR_X_balanced_squares)  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^][\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares>)

        (?<PPR_X_balanced_angles>
            [^><\\\n]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                [^><\\\n]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles>)

        (?<PPR_X_balanced_unicode_delims>
            (?============================)* <-- HERE +
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                )
                (?============================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims>)

        (?<PPR_X_regex_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))            (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))            (?= \] )
                |
                    \(  (?>
                            \?{1,2}+ (?= \{ )
                            (?>(?&PerlBlock))
                        |
                            (?! \?{1,2}+ \{ )
                            (?>(?&PPR_X_balanced_parens))
                        )                                       (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))              (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_regex_body_unclosed>)

        (?<PPR_X_quotelike_body_unclosed>
            (?>
                [#]
                [^#\\\n]*+
                (?:
                    (?: \\. | (?&PPR_X_newline_and_heredoc) )
                    [^#\\\n]*+
                )*+
                (?= [#] )
            |
                (?>(?&PerlOWS))
                (?>
                    \{  (?>(?&PPR_X_balanced_curlies))        (?= \} )
                |
                    \[  (?>(?&PPR_X_balanced_squares))        (?= \] )
                |
                    \(  (?>(?&PPR_X_balanced_parens))         (?= \) )
                |
                    <  (?>(?&PPR_X_balanced_angles))          (?=  > )
                |
                    (\X) (?======================================================)
                    (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                    (?>(?&PPR_X_balanced_unicode_delims))
                    (?=  (?======================) )
                |
                    \\
                        [^\\\n]*+
                        (
                            (?&PPR_X_newline_and_heredoc)
                            [^\\\n]*+
                        )*+
                    (?= \\ )
                |
                    /
                        [^\\/\n]*+
                    (?:
                        (?: \\. | (?&PPR_X_newline_and_heredoc) )
                        [^\\/\n]*+
                    )*+
                    (?=  / )
                |
                    (?<PPR_X_qldel> \S )
                        (?:
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?! \g{PPR_X_qldel} ) .
                        )*+
                    (?= \g{PPR_X_qldel} )
                )
            )
        ) # End of rule (?<PPR_X_quotelike_body_unclosed>)

        (?<PPR_X_quotelike_body_interpolated>
            (?>(?&PPR_X_quotelike_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated>)

        (?<PPR_X_regex_body_interpolated>
            (?>(?&PPR_X_regex_body_interpolated_unclosed))
            \S   # (Note: Don't have to test that this matches; the preceding subrule already did that)
        ) # End of rule (?<PPR_X_regex_body_interpolated>)

        (?<PPR_X_balanced_parens_regex_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_regex_interpolated>)

        (?<PPR_X_balanced_curlies_regex_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_regex_interpolated>)

        (?<PPR_X_balanced_squares_regex_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\](|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\](|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_regex_interpolated>)

        (?<PPR_X_balanced_angles_regex_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_regex_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>(|)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>(|)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_regex_interpolated>)


        (?<PPR_X_balanced_unicode_delims_regex_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=======================)
                    (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                    (?========================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlScalarAccessNoSpace)
                |
                    (?= \$ (?===========================================) )
                    (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_regex_interpolated>)


        (?<PPR_X_balanced_parens_interpolated>
            [^)(\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \(  (?>(?&PPR_X_balanced_parens_interpolated))  \)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\)] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\)] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^)(\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_parens_interpolated>)

        (?<PPR_X_balanced_curlies_interpolated>
            [^\}\{\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \{  (?>(?&PPR_X_balanced_curlies_interpolated))  \}
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\}] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\}] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^\}\{\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_curlies_interpolated>)

        (?<PPR_X_balanced_squares_interpolated>
            [^][\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    \[  (?>(?&PPR_X_balanced_squares_interpolated))  \]
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s\]] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s\]] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^][\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_squares_interpolated>)

        (?<PPR_X_balanced_unicode_delims_interpolated>
            (?=====================================)*+
            (?:
                (?>
                    \\.
                |
                    (?=====================)
                    (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                    (?======================)
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! \s | (?======================) ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! \s | (?======================) ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                (?=====================================)*+
            )*+
        ) # End of rule (?<PPR_X_balanced_unicode_delims_interpolated>)

        (?<PPR_X_balanced_angles_interpolated>
            [^><\\\n\$\@]*+
            (?:
                (?>
                    \\.
                |
                    <  (?>(?&PPR_X_balanced_angles_interpolated))  >
                |
                    (?&PPR_X_newline_and_heredoc)
                |
                    (?= \$ (?! [\s>] ) )  (?&PerlScalarAccessNoSpace)
                |
                    (?= \@ (?! [\s>] ) )  (?&PerlArrayAccessNoSpace)
                |
                    [\$\@]
                )
                [^><\\\n\$\@]*+
            )*+
        ) # End of rule (?<PPR_X_balanced_angles_interpolated>)

        (?<PPR_X_regex_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#|()] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#|()] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_regex_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_regex_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_regex_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_regex_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_regex_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s|()-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s|()-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | [\s|()] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_regex_body_unclosed)
        ) # End of rule (?<PPR_X_regex_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_body_interpolated_unclosed>
            # Start by working out where it actually ends (ignoring interpolations)...
            (?=
                (?>
                    [#]
                    [^#\\\n\$\@]*+
                    (?:
                        (?>
                            \\.
                        |
                            (?&PPR_X_newline_and_heredoc)
                        |
                            (?= \$ (?! [\s#] ) )  (?&PerlScalarAccessNoSpace)
                        |
                            (?= \@ (?! [\s#] ) )  (?&PerlArrayAccessNoSpace)
                        |
                            [\$\@]
                        )
                        [^#\\\n\$\@]*+
                    )*+
                    (?= [#] )
                |
                    (?>(?&PerlOWS))
                    (?>
                        \{  (?>(?&PPR_X_balanced_curlies_interpolated))    (?= \} )
                    |
                        \[  (?>(?&PPR_X_balanced_squares_interpolated))    (?= \] )
                    |
                        \(  (?>(?&PPR_X_balanced_parens_interpolated))     (?= \) )
                    |
                        <   (?>(?&PPR_X_balanced_angles_interpolated))     (?=  > )
                    |
                        (\X) (?======================================================)
                        (?=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================)
                        (?>(?&PPR_X_balanced_unicode_delims_interpolated))
                        (?=  (?======================) )
                    |
                        '
                            [^'\n]*+
                            (?:
                                (?> (?&PPR_X_newline_and_heredoc))
                                [^'\n]*+
                            )*+
                        (?= ' )
                    |
                        \\
                            [^\\\n\$\@]*+
                            (?:
                                (?>
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s\\] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s\\] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\\n\$\@]*+
                            )*+
                        (?= \\ )
                    |
                        /
                            [^\\/\n\$\@]*+
                            (?:
                                (?>
                                    \\.
                                |
                                    (?&PPR_X_newline_and_heredoc)
                                |
                                    (?= \$ (?! [\s/] ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! [\s/] ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    [\$\@]
                                )
                                [^\\/\n\$\@]*+
                            )*+
                        (?= / )
                    |
                        -
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?:
                                    (?= \$ (?! [\s-] ) )  (?&PerlScalarAccessNoSpaceNoArrow)
                                |
                                    (?= \@ (?! [\s-] ) )  (?&PerlArrayAccessNoSpaceNoArrow)
                                |
                                    [^-]
                                )
                            )*+
                        (?= - )
                    |
                        (?<PPR_X_qldel> \S )
                            (?:
                                \\.
                            |
                                (?&PPR_X_newline_and_heredoc)
                            |
                                (?! \g{PPR_X_qldel} )
                                (?:
                                    (?= \$ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlScalarAccessNoSpace)
                                |
                                    (?= \@ (?! \g{PPR_X_qldel} | \s ) )  (?&PerlArrayAccessNoSpace)
                                |
                                    .
                                )
                            )*+
                        (?= \g{PPR_X_qldel} )
                    )
                )
            )

            (?&PPR_X_quotelike_body_unclosed)
        ) # End of rule (?<PPR_X_quotelike_body_interpolated_unclosed>)

        (?<PPR_X_quotelike_s_e_check>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body_interpolated)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check>)

        (?<PPR_X_quotelike_s_e_check_uninterpolated>
            (?=============================================)
            (?:
                (?=
                    (?&PPR_X_quotelike_body)
                    (?===========================================)
                    [msixpodualgcrn]*+ e [msixpodualgcern]*+
                )
                (?=
                    \S  # Skip the left delimiter
                    (?(?==================================)
                        (?>
                            (?===============================================================)
                            (?>
                                (?&PerlExpression)
                            |
                                \\?+ .
                            )
                        )*+
                    )
                )
            )?+
        ) # End of rule (?<PPR_X_quotelike_s_e_check_uninterpolated>)

        (?<PPR_X_filetest_name>   [ABCMORSTWXbcdefgkloprstuwxz]          )

        (?<PPR_X_digit_seq>               \d++ (?: _?+         \d++ )*+  )
        (?<PPR_X_x_digit_seq>     [\da-fA-F]++ (?: _?+ [\da-fA-F]++ )*+  )
        (?<PPR_X_o_digit_seq>          [0-7]++ (?: _?+      [0-7]++ )*+  )
        (?<PPR_X_b_digit_seq>          [0-1]++ (?: _?+      [0-1]++ )*+  )

        (?<PPR_X_newline_and_heredoc>
            \n (?===================================================================================================)
        ) # End of rule (?<PPR_X_newline_and_heredoc>)
    )
    # END OF GRAMMAR
)/ at (eval 33) line 2216.
t/submatch-rule.t ............... 
Dubious, test returned 255 (wstat 65280, 0xff00)
No subtests run 

Test Summary Report
-------------------
t/plugin-coresignatures.t     (Wstat: 65280 (exited 255) Tests: 0 Failed: 0)
  Non-zero exit status: 255
  Parse errors: No plan found in TAP output
t/plugin-definedor.t          (Wstat: 65280 (exited 255) Tests: 0 Failed: 0)
  Non-zero exit status: 255
  Parse errors: No plan found in TAP output
t/plugin-ellipsis.t           (Wstat: 65280 (exited 255) Tests: 0 Failed: 0)
  Non-zero exit status: 255
  Parse errors: No plan found in TAP output
t/plugin-packageblock.t       (Wstat: 65280 (exited 255) Tests: 0 Failed: 0)
  Non-zero exit status: 255
  Parse errors: No plan found in TAP output
t/plugin-packageversion.t     (Wstat: 65280 (exited 255) Tests: 0 Failed: 0)
  Non-zero exit status: 255
  Parse errors: No plan found in TAP output
t/plugin-postfixderef.t       (Wstat: 65280 (exited 255) Tests: 0 Failed: 0)
  Non-zero exit status: 255
  Parse errors: No plan found in TAP output
t/plugin-sigify.t             (Wstat: 65280 (exited 255) Tests: 0 Failed: 0)
  Non-zero exit status: 255
  Parse errors: No plan found in TAP output
t/plugin-skt.t                (Wstat: 65280 (exited 255) Tests: 0 Failed: 0)
  Non-zero exit status: 255
  Parse errors: No plan found in TAP output
t/plugin-state.t              (Wstat: 65280 (exited 255) Tests: 0 Failed: 0)
  Non-zero exit status: 255
  Parse errors: No plan found in TAP output
t/plugin-substituteandreturn.t (Wstat: 65280 (exited 255) Tests: 0 Failed: 0)
  Non-zero exit status: 255
  Parse errors: No plan found in TAP output
t/simple.t                    (Wstat: 65280 (exited 255) Tests: 1 Failed: 0)
  Non-zero exit status: 255
  Parse errors: No plan found in TAP output
t/submatch-rule.t             (Wstat: 65280 (exited 255) Tests: 0 Failed: 0)
  Non-zero exit status: 255
  Parse errors: No plan found in TAP output
Files=12, Tests=1,  6 wallclock secs ( 0.05 usr  0.02 sys +  4.45 cusr  0.44 csys =  4.96 CPU)
Result: FAIL

------------------------------
PREREQUISITES
------------------------------

Prerequisite modules loaded:

requires:

    Module              Need     Have    
    ------------------- -------- --------
    List::Util          1.45     1.62    
    Module::Runtime     0        0.016   
    Moo                 2        2.005004
    Mu                  0        1.191300
    PPR                 0.001004 0.001004
    strictures          2        2.000006

configure_requires:

    Module              Need     Have    
    ------------------- -------- --------
    Module::Build::Tiny 0.034    0.039   


------------------------------
ENVIRONMENT AND OTHER CONTEXT
------------------------------

Environment variables:

    AUTOMATED_TESTING = 1
    LANG = en_US.UTF-8
    LANGUAGE = en_US:en
    PATH = /home/sand/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/local/perl/bin:/usr/X11/bin:/sbin:/usr/sbin
    PERL5LIB = /tmp/loop_over_bdir-30477-_WnfOT/PPR-0.001004-0/blib/arch:/tmp/loop_over_bdir-30477-_WnfOT/PPR-0.001004-0/blib/lib:/tmp/loop_over_bdir-30477-_WnfOT/Mu-1.191300-0/blib/arch:/tmp/loop_over_bdir-30477-_WnfOT/Mu-1.191300-0/blib/lib:/tmp/loop_over_bdir-30477-_WnfOT/MooX-ShortHas-1.202040-0/blib/arch:/tmp/loop_over_bdir-30477-_WnfOT/MooX-ShortHas-1.202040-0/blib/lib
    PERL5OPT = 
    PERL5_CPANPLUS_IS_RUNNING = 10639
    PERL5_CPAN_IS_RUNNING = 10639
    PERL_CANARY_STABILITY_NOPROMPT = 1
    PERL_MM_USE_DEFAULT = 1
    PERL_USE_UNSAFE_INC = 1
    SHELL = /usr/bin/zsh
    TERM = screen

Perl special variables (and OS-specific diagnostics, for MSWin32):

    $^X = /home/sand/src/perl/repoperls/installed-perls/host/k93stretch/v5.36.0/2cd7/bin/perl
    $UID/$EUID = 1005 / 1005
    $GID = 1005 1005
    $EGID = 1005 1005

Perl module toolchain versions installed:

    Module              Have    
    ------------------- --------
    CPAN                2.34    
    CPAN::Meta          2.150010
    Cwd                 3.84    
    ExtUtils::CBuilder  0.280236
    ExtUtils::Command   7.64    
    ExtUtils::Install   2.20    
    ExtUtils::MakeMaker 7.64    
    ExtUtils::Manifest  1.73    
    ExtUtils::ParseXS   3.45    
    File::Spec          3.84    
    JSON                4.06    
    JSON::PP            4.09    
    Module::Build       0.4231  
    Module::Signature   0.88    
    Parse::CPAN::Meta   2.150010
    Test::Harness       3.44    
    Test::More          1.302190
    YAML                1.30    
    YAML::Syck          1.34    
    version             0.9929  


--

Summary of my perl5 (revision 5 version 36 subversion 0) configuration:
  Commit id: b3c502b607191da0e743a4fa34501a05442305b3
  Platform:
    osname=linux
    osvers=4.9.0-18-amd64
    archname=x86_64-linux-thread-multi
    uname='linux k93stretch 4.9.0-18-amd64 #1 smp debian 4.9.303-1 (2022-03-07) x86_64 gnulinux '
    config_args='-Dprefix=/home/sand/src/perl/repoperls/installed-perls/host/k93stretch/v5.36.0/2cd7 -Dmyhostname=k93stretch -Dinstallusrbinperl=n -Uversiononly -Dusedevel -des -Ui_db -Dlibswanted=cl pthread socket inet nsl gdbm dbm malloc dl ld sun m crypt sec util c cposix posix ucb BSD gdbm_compat -Duseithreads -Uuselongdouble -DEBUGGING=both'
    hint=recommended
    useposix=true
    d_sigaction=define
    useithreads=define
    usemultiplicity=define
    use64bitint=define
    use64bitall=define
    uselongdouble=undef
    usemymalloc=n
    default_inc_excludes_dot=define
  Compiler:
    cc='cc'
    ccflags ='-D_REENTRANT -D_GNU_SOURCE -fwrapv -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2'
    optimize='-O2 -g'
    cppflags='-D_REENTRANT -D_GNU_SOURCE -fwrapv -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include'
    ccversion=''
    gccversion='6.3.0 20170516'
    gccosandvers=''
    intsize=4
    longsize=8
    ptrsize=8
    doublesize=8
    byteorder=12345678
    doublekind=3
    d_longlong=define
    longlongsize=8
    d_longdbl=define
    longdblsize=16
    longdblkind=3
    ivtype='long'
    ivsize=8
    nvtype='double'
    nvsize=8
    Off_t='off_t'
    lseeksize=8
    alignbytes=8
    prototype=define
  Linker and Libraries:
    ld='cc'
    ldflags =' -fstack-protector-strong -L/usr/local/lib'
    libpth=/usr/local/lib /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib
    libs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc
    perllibs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc
    libc=libc-2.24.so
    so=so
    useshrplib=false
    libperl=libperl.a
    gnulibc_version='2.24'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs
    dlext=so
    d_dlsymun=undef
    ccdlflags='-Wl,-E'
    cccdlflags='-fPIC'
    lddlflags='-shared -O2 -g -L/usr/local/lib -fstack-protector-strong'


Characteristics of this binary (from libperl): 
  Compile-time options:
    DEBUGGING
    HAS_TIMES
    MULTIPLICITY
    PERLIO_LAYERS
    PERL_COPY_ON_WRITE
    PERL_DONT_CREATE_GVSV
    PERL_MALLOC_WRAP
    PERL_OP_PARENT
    PERL_PRESERVE_IVUV
    PERL_TRACK_MEMPOOL
    PERL_USE_DEVEL
    USE_64_BIT_ALL
    USE_64_BIT_INT
    USE_ITHREADS
    USE_LARGE_FILES
    USE_LOCALE
    USE_LOCALE_COLLATE
    USE_LOCALE_CTYPE
    USE_LOCALE_NUMERIC
    USE_LOCALE_TIME
    USE_PERLIO
    USE_PERL_ATOF
    USE_REENTRANT_API
    USE_THREAD_SAFE_LOCALE
  Built under linux
  Compiled at May 30 2022 10:17:19
  %ENV:
    PERL5LIB="/tmp/loop_over_bdir-30477-_WnfOT/PPR-0.001004-0/blib/arch:/tmp/loop_over_bdir-30477-_WnfOT/PPR-0.001004-0/blib/lib:/tmp/loop_over_bdir-30477-_WnfOT/Mu-1.191300-0/blib/arch:/tmp/loop_over_bdir-30477-_WnfOT/Mu-1.191300-0/blib/lib:/tmp/loop_over_bdir-30477-_WnfOT/MooX-ShortHas-1.202040-0/blib/arch:/tmp/loop_over_bdir-30477-_WnfOT/MooX-ShortHas-1.202040-0/blib/lib"
    PERL5OPT=""
    PERL5_CPANPLUS_IS_RUNNING="10639"
    PERL5_CPAN_IS_RUNNING="10639"
    PERL_CANARY_STABILITY_NOPROMPT="1"
    PERL_MM_USE_DEFAULT="1"
    PERL_USE_UNSAFE_INC="1"
  @INC:
    /tmp/loop_over_bdir-30477-_WnfOT/PPR-0.001004-0/blib/arch
    /tmp/loop_over_bdir-30477-_WnfOT/PPR-0.001004-0/blib/lib
    /tmp/loop_over_bdir-30477-_WnfOT/Mu-1.191300-0/blib/arch
    /tmp/loop_over_bdir-30477-_WnfOT/Mu-1.191300-0/blib/lib
    /tmp/loop_over_bdir-30477-_WnfOT/MooX-ShortHas-1.202040-0/blib/arch
    /tmp/loop_over_bdir-30477-_WnfOT/MooX-ShortHas-1.202040-0/blib/lib
    /home/sand/src/perl/repoperls/installed-perls/host/k93stretch/v5.36.0/2cd7/lib/site_perl/5.36.0/x86_64-linux-thread-multi
    /home/sand/src/perl/repoperls/installed-perls/host/k93stretch/v5.36.0/2cd7/lib/site_perl/5.36.0
    /home/sand/src/perl/repoperls/installed-perls/host/k93stretch/v5.36.0/2cd7/lib/5.36.0/x86_64-linux-thread-multi
    /home/sand/src/perl/repoperls/installed-perls/host/k93stretch/v5.36.0/2cd7/lib/5.36.0
    .