| [reply] [Watch: Dir/Any] [d/l] [select] |
From perlre, identical in both Strawberry 5.14.2.1 local docs and 5.16.2 on-line docs (emphases added):
-
\K [6] Keep the stuff left of the \K, don't include it in $&
(Note [6] simply refers to the discussion in the "Look-Around Assertions" section.)
-
From "Look-Around Assertions":
There is a special form of this construct, called "\K",
which causes the regex engine to "keep" everything it had
matched prior to the "\K" and not include it in $&.
Hmmm... I suppose when I read these sections heretofore, my attention was drawn to the "don't include..." clauses and I more or less ignored the "left of" and "prior to" statements. My naive association of "keep" is with inclusion: in this specific instance, everything to the right of \K is (or could be) included in $&. The docs seem to be using "keep" in the sense of "keep back", i.e., "to exclude": everything to the left of \K is "kept back" from inclusion in $&. Perhaps they are discussing the behavior \K in the context of substitution: everything left of the \K is not included in $& and so cannot be zapped by substitution: it is "kept safe" from substitution. But \K is equally valid and useful in both m// matching and s/// substitution, so...
I can't say I would agree with the perhaps subtle interpretation given to "keep" in the documentation, but it is fully clarified by the "don't include" language and by the examples, so I doubt this qualifies as a doc-bug.
Update: LanX: Almost as confusing like using single line and multi line modifier at the same time... ++That!
| [reply] [Watch: Dir/Any] [d/l] [select] |
...everything left of the \K is not included in $& and so cannot be zapped by substitution: it is "kept safe" from substitution.
Well said...
Given this, I might read perlre as "Keep the stuff left of the \K, i.e., don't include it in $&". Put another way, if the stuff left of \K were included in $&, it wouldn't be kept--and I believe this is the essence of your quote above.
Got a great laugh from your Update! Thanks for that...
| [reply] [Watch: Dir/Any] |
Just a matter of perspective: the left part which is kept unchanged is the one ignored from substitution, because the right part is kept in '$&'.
So both parts are kept, just in different aspects.
Almost as confusing as using single line and multi line modifiers at the same time...
| [reply] [Watch: Dir/Any] |