The {$r} in the regex is acting as a quantifier, not an index. It would be better to use split, splice, and join, like this:
#! perl use Modern::Perl; my $separator = '|'; my $replacement = ','; my $target_count = 2; my $line = '1|2|3'; my $ft_count = 0; ++$ft_count while $line =~ /\Q$separator\E/g; if ($ft_count == $target_count) { my @data = split /\Q$separator\E/, $line; splice(@data, $target_count - 1, 2, "$data[$target_count - 1]$repl +acement$data[$target_count]"); $line = join($separator, @data); } print $line, "\n";
Output:
16:38 >perl 453_SoPW.pl 1|2,3 16:46 >
See perlre for \Q...\E.
Hope that helps,
| Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
In reply to Re: Replacing with comma
by Athanasius
in thread Replacing with comma
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |