use strict; use warnings; use Text::CSV_XS; # Setup a CSV obj to parse the user seperator my $csv_in = Text::CSV_XS->new({ sep_char => '^' }); # Setup a CSV obj to handle the output seperator my $csv_out = Text::CSV_XS->new({ sep_char => '|' }); open(IN,"in_file") or die "$!\n"; my %hash; while (my $line = ) { my $status = $csv_in->parse($line); my @cols = $csv_in->fields(); $hash{$cols[0]} = $cols[1]; # or whatever } foreach (keys %hash) { my $string = $csv_out->combine($_,$hash{$_}); print "$string\n"; }