So that middle value is not undef, but "". Of course, since DBI's results are supposed to be as independent as possible of the underlying data structure, there may -- in fact, should -- be routines within DBD::CSV to convert "" to undef, which is what you'd expect to get if you were using an actual RDBMS. That's assuming it even uses something so crude as that split to get at the data =)
You're right, '' is not the same as NULL, at least in databases following the ANSI standard.
This way you can always distinguish between 'something entered in this column, even if it's nothing' and 'nothing entered in this column'