I'm a little surprised that the loop exits on null values, but the fix is easy. When used in a logical context, null values and zeros evaluate to false. The easy solution is to test values with the defined function in place of just testing the value ( i.e. replace while (my $data_ref = $csv->getline($fh)) with while (defined(my $data_ref = $csv->getline($fh))) ). This will only return false if the value in the tested variable is undef.