in reply to Split and join - semicolons around empty fields are lost
That's how split is documented. I really recommend that you use Text::CSV_XS, or at least pass in the number of expected columns to split.