How can I access capture buffers in brackets with quantifiers?
#!/usr/local/bin/perl
use warnings;
use 5.014;
my $string = '12 34 56 78 90';
say $string =~ s/(?:(\S+)\s){2}/$1,$2,/r;
# Use of uninitialized value $2 in concatenation (.) or string at ./so.pl line 7.
# 34,,56 78 90
With @LAST_MATCH_START
and @LAST_MATCH_END
it works*, but the line gets too long.
Doesn't work, look at TLP's answer.
*The proof of the pudding is in the eating
isn't always right.
say $string =~ s/(?:(\S+)\s){2}/substr( $string, $-[0], length($-[0]-$+[0]) ) . ',' . substr( $string, $-[1], length($-[1]-$+[1]) ) . ','/re;
# 12,34,56 78 90
You can't access all previous values of the first capturing group, only the last value (or the current at the match end, as you can see it) will be saved in $1
(unless you want to use a (?{ code })
hack).
For your example you could use something like:
s/(\S+)\s+(\S+)\s+/$1,$2,/