While
Text::CSV_XS is best for production use, it won't do you much good as an example of parsing CSV unless you want to look at the C code in it. For pure perl, you might want to look at
AnyData::Format::CSV which uses a modifed Friedl regex to support variable delimiters, escape characters, etc. But note: it does not (yet) support embedded newlines unless something other than a single newline is used as a record separator.