in reply to exist backreference variable list?


for my $i (0..@-) {
    print "$i: $matches[$i]\n";
}
...
Use of unitialized value in concatenation ...
...
... I'm confused as to what the error message means and how to deal with it.

If a regex matches against a string, the zeroth index of the  @- array always holds the overall match offset in the string, and higher indices (1, 2, ...) hold capture group match offsets, if there are any capture groups. (Note that if there is an overall match, all capture groups will be represented in  @- even if they did not match!) See  @- in perlvar. So in a regex that has two capture group matches, there are three elements in the array, and you want to iterate over the range  0 .. $#- to see all match offsets (or maybe over  1 .. $#- to see just capture group match offsets). Iterating over  0 .. @- gives you an extraneous, undefined element beyond the end of the  @- array. (Evaluating an array in scalar context yields the number of elements of the array, not the highest array index, given by $#array.)


Give a man a fish:  <%-(-(-(-<