All of these solutions are great, but they all assume that you can't have a comma as part of the field value.
Given that this is almost always possible, you have two choices:
- If commas as part of the field are escaped, then you can use a negative look-behind assertion:split(/(?<!\\),/, $line)
- If commas are not escaped, but can form part of a field delimitted with quotation-marks of some kind (" or ') then things get a lot uglier. I believe that there's a regex that could do it, but I could never figure it out and had to switch to a while loop and essentially chew through a line.