I've below code which is used to read a csv file and convert to hash. The Keys are dependent on the number of key columns that user need.
use warnings;
use strict;
my %hash;
my $KeyCols = 2;
while (<DATA>) {
chomp;
my @cols = split /,/, $_, $KeyCols+1;
next unless @cols > $KeyCols;
my $v = pop @cols;
my $k = join '', @cols;
$hash{$k} = $v;
}
I need help in achieving the same logic using TEXT::CSV_XS package for efficiency. Please help.
The real reason for using Text::CSV_XS is for correctness. It's not going to be faster than what you have, but it will work where yours will fail.
Concatenating the fields together directly (without a separator) seems really odd.
The above makes the value an array of fields rather than CSV. If you want CSV as in the original, you will need to re-encode them into CSV.