cat x.pl; echo ; perl x.pl use strict; use warnings; while ( my $line = ) { my $old = $line; my @match = ( $line =~ m/ "( [^"]* )" /gx ) ; #" for my $str ( @match ) { ( my $replace = $str ) =~ tr/,/|/ ; # Search string quoted. $line =~ s/ \Q${str}\E /$replace/gx; } printf "ORIG: %s NEW: %s\n" , $old , $line; } __DATA__ ONE,"TWo,2",Three,Four,Five ONE,"$TWo,2",Three,Four,Five ONE,"$TWo2","Three,(3)",Four,Five ONE,"$TWo2","Three,(3",Four,Five ORIG: ONE,"TWo,2",Three,Four,Five NEW: ONE,"TWo|2",Three,Four,Five ORIG: ONE,"$TWo,2",Three,Four,Five NEW: ONE,"$TWo|2",Three,Four,Five ORIG: ONE,"$TWo2","Three,(3)",Four,Five NEW: ONE,"$TWo2","Three|(3)",Four,Five ORIG: ONE,"$TWo2","Three,(3",Four,Five NEW: ONE,"$TWo2","Three|(3",Four,Five