As friedo said, Text::xSV will most definitely do the job, but if the separator character(s) is not found in the actual data (i.e. it is only used as a separator), I don't know if you're going to get much faster performance than doing a line-by-line split. It shouldn't be that time consuming, even on a large file (unless you're running on ancient hardware).