use warnings; use strict; use Text::CSV; my $csv = Text::CSV->new({ binary=>1, auto_diag=>2, eol=>$/, sep_char => ";" }); open my $ifh, '<', 'Input.CSV' or die $!; open my $ofh, '>', 'Output.CSV' or die $!; while ( my $row = $csv->getline($ifh) ) { # your logic to modify data here $csv->print($ofh, $row); } $csv->eof or $csv->error_diag; close $ifh; close $ofh;