> both e* and e+ should have given same output. Why is the difference in output?
Good question, I think many are confused.
It's important to understand that empty matches exist and that e* means e{0}|e+ ( or something like e{0,32766} ° ).
So you are actually matching e{0} before all!
Printing out the match position of a capture group via @+ helps demonstrating it
DB<1> $_ = "This is a teeeext for testting";
DB<2> ;/(?<char>e*)/ and print "'$+{char}' is matched pattern at p
+os $+[0]\n";
'' is matched pattern at pos 0
DB<3> ;/(?<char>e{0})/ and print "'$+{char}' is matched pattern at
+ pos $+[0]\n";
'' is matched pattern at pos 0
DB<4> ;/(?<char>e+)/ and print "'$+{char}' is matched pattern at p
+os $+[0]\n";
'eeee' is matched pattern at pos 15
DB<5> ;/(?<char>e{1,32766})/ and print "'$+{char}' is matched patt
+ern at pos $+[0]\n";
'eeee' is matched pattern at pos 15
DB<6>
update
- Actually $+[0] gives you the end of the first match, $-[0] will give you the start.
- e* is not limited in my Perl version but the upper bound in e{,} is.
- couldn't find positions of named groups
°) yes there is an maximal upper bound in range quantifiers, which I expected to be around 2**16, so it's an incomplete analogy |