use Text::CSV qw( ); my $content = ...; my $csv = Text::CSV->new(); while (length($content)) { my ($line) = $content =~ s/^([^\r\n]*)\r?\n?//; my $status = $csv->parse($line) or die; my @fields = $csv->fields(); ... }