$ cat test.pl #!/pro/bin/perl use 5.012003; use warnings; use Text::CSV_XS qw( csv ); my $aoh = csv (in => *DATA, kh => \my @h); say "Head was (@h)"; # Construct new header (out of old header) my @nh = qw( column2 column1 column4 column3 ); csv (in => $aoh, headers => \@nh); __END__ column1,column2,column3,column4,column5,column6 datar1c1,datar1c2,datar1c3,datar1c4,datar1c5,datar1c6 datar2c1,"data,r2c2",datar2c3,datar2c4,datar2c5,datar2c6 datar3c1,datar3c2,"data, r3c3",datar3c4,datar3c5,datar3c6 #### $ perl test.pl Head was (column1 column2 column3 column4 column5 column6) column2,column1,column4,column3 datar1c2,datar1c1,datar1c4,datar1c3 "data,r2c2",datar2c1,datar2c4,datar2c3 datar3c2,datar3c1,datar3c4,"data, r3c3"