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;