use Text::CSV; use strict; use warnings; my $inputstring = qq{field1\tfield2\t\"field3\t\t\"\tfield4\n}; my $csv = Text::CSV->new({eol => "\n", sep_char => "\t", binary => 1}); $csv->parse($inputstring) or die "csv error: " . $csv->error_input(); my @columns = $csv->fields(); s/\t//g for (@columns); $csv->combine(@columns) or die "csv error: " . $csv->error_input(); my $string = $csv->string(); print $string;