#!/usr/bin/perl -w use Parse::RecDescent; my $PCSV_parser = Parse::RecDescent->new(<<'EOGRAMMAR'); file: line(s?) line: field(s? /,|=>/) "\n" { $item[1] } field: { join "", @{$item[1]} } | /((?!,|=>).)*/ EOGRAMMAR use Data::Dumper; print Data::Dumper->Dump($PCSV_parser->file(join "", )); __DATA__ comma,separated=>values with,q{a,perl,twist},/to them/