If you already use Text::CSV_XS, there is no need to also use Text::CSV.
If you are using getline_hr () with column_names (), why not take the extra step to use bind_columns () and regain all the speed/performance you just lost by using hash references?
The comma is the default sep_char value. You should never need to pass that to the constructor.
You don't need any error_diag () call if you pass auto_diag => 1 to the constructor.