my $ic = Text::CSV->new ({ binary => 1, allow_whitespace => 1, auto_diag => 1 }); #### allow_whitespace When this option is set to true, whitespace (TAB's and SPACE's) surrounding the separation character is removed when parsing. If either TAB or SPACE is one of the three major characters "sep_char", "quote_char", or "escape_char" it will not be considered whitespace. Now lines like: 1 , "foo" , bar , 3 , zapp are correctly parsed, even though it violates the CSV specs. Note that all whitespace is stripped from start and end of each field. That would make it more a feature than a way to enable parsing bad CSV lines, as 1, 2.0, 3, ape , monkey will now be parsed as ("1", "2.0", "3", "ape", "monkey") even if the original line was perfectly sane CSV.