in reply to need to optimize my sub routine
I'd move my $csv = Text::CSV_XS->new; to outside the loops. You don't need to create one for every line you read.