is_missing my $missing = $csv->is_missing ($column_idx); Where $column_idx is the (zero-based) index of the column in the last result of "getline_hr". while (my $hr = $csv->getline_hr ($fh)) { $csv->is_missing (0) and next; # This was an empty line } When using "getline_hr" for parsing, it is impossible to tell if the fields are "undef" because they where not filled in the CSV stream or because they were not read at all, as all the fields defined by "column_names" are set in the hash-ref. If you still need to know if all fields in each row are provided, you should enable "keep_meta_info" so you can check the flags. #### my $csv = Text::CSV_XS->new ({ auto_diag => 1, binary => 1, keep_meta_info => 1, });