my $c = 0; s/-/$c++ < 3 ? '-' : ','/eg;
####
local our $c = 0; s/-(?(?{ $c++ < 3 })(?!))/,/g;
####
# As is, assumes at least 3 commas are found.
my ($pre, $post) = /^((?:[^-]-){3})(.*)/s;
$post =~ s/-/,/g;
$_ = "$pre$post";
####
# As is, assumes at least 4 commas are found.
my @parts = split(/-/, $_, -1);
$_ = join(',', join('-', @parts[0..3]), @parts[4..$#parts]);
####
s/\|//; s/[|\s]+//g; my $c = 0; s/-/$c++ < 3 ? '-' : ','/eg;
####
s/\|//; s/\|/,/g; s/\s+//g; my $c = 0; s/-/$c++ < 3 ? '-' : ','/eg;