Использовать Текст :: CSV_XS . Это быстро, в меру гибко и очень хорошо проверено. Ответ на многие из этих вопросов - что-то на CPAN. Зачем тратить время на то, чтобы сделать что-то не такое хорошее, как то, что многие люди уже усовершенствовали и протестировали?
Если вы не хотите использовать внешние модули, что является глупым возражением, посмотрите на код в Text :: CSV_XS и сделайте это. Я постоянно удивляюсь, что люди думают, что, хотя они думают, что не могут использовать модуль, они не будут использовать известное и протестированное решение в качестве примера кода для той же задачи.