use warnings; use strict; my $filename = $ARGV[0] or die "Need to get CSV file on the command line\n"; my $outfile = $ARGV[1] or die "Need to get CSV file on the command line\n"; open(FH, '<:encoding(utf8)', $filename) or die $!; open(FHOUT, '>:encoding(UTF-8)', $outfile) or die $!; my $char; my $read; my $infield = 0; my $column = 0; my $row = 0; my $value = ""; while($read = read FH, $char, 1){ if ( $char eq "'" && $infield == 0 ) { # field begin $infield = 1; $column++; } elsif ( $char eq "'" && $infield == 1 ) { # field end $infield = 0; print "(".$value.")"; print FHOUT $value; $value = ""; } elsif ( $char eq "\n" && $infield == 0 ) { # end of record $column = 0; $row++; print FHOUT "\n"; } elsif ( $char eq "," && $infield == 0 ) { # comma while not in field = separator of col print FHOUT "\t"; } else { # its a value $value = $value . $char; } # my @fields = split "," , $_; # ( $fields[0] && print $fields[0] ) || print ""; } close(FHOUT); close(FH);