1. Why not? OK, you want to learn, but the problem with CSV is that it looks easy at first but becomes exponentially more complex at every situation that is not simple, like embedded quotes, embedded separation characters (comma), embedded newlines, escaped comma's, (mixed) encodings, etc etc. I do not want to put you off (or insult you), but writing a real (decent) CSV parser is not something to take on as a learning process. OTOH, you could just fetch Text::CSV's code and look at how they do it and learn from that. Then you do not use it as a module, but all the questions you might come up with might have a working answer in the code.