use File::Copy qw(move); use Text::CSV; use strict; use warnings; my $csv = Text::CSV->new({binary => 1, eol => "\n"}) or die "Cannot use CSV: ".Text::CSV->error_diag (); my $oldfile = 'old.csv'; my $newfile = $oldfile . '.tmp'; open my $in, $oldfile or die "$oldfile: $!"; open my $out, '>', $newfile or die "$newfile: $!"; while (my $row = $csv->getline($in)) { splice @$row, 1, 0, "New Col 2"; $csv->print($out, $row); } close $in; close $out; move($newfile, $oldfile) or die "Can't move: $!";