use File::Copy qw(move); use Text::CSV; use strict; use warnings; use autodie; # no need to catch open/read/write/close errors anymore my $csv = Text::CSV->new ({ binary => 1, auto_diag => 1, eol => "\n" }); my $oldfile = "old.csv"; my $newfile = $oldfile . ".tmp"; open my $in, "<", $oldfile; open my $out, ">", $newfile; while (my $row = $csv->getline ($in)) { splice @$row, 1, 0, "New Col 2"; $csv->print ($out, $row); } close $in; close $out;