use Text::CSV qw( csv ); use Data::Peek; my $aoa = csv (in => *DATA, sep => ", ", quo => "'", on_in => sub { $_[1][0] =~ s/^\(//; $_[1][-1] =~ s/\),?\s*$//; }); DDumper $aoa;