use strict; use warnings; use Data::Dumper; open my $csvFH, q{<}, \ <[ 0 ], { map { split m{\s*=\s*} } split m{\s*,\s*}, $_->[ 1 ] } } map { chomp; [ split m{\s*,\s*}, $_, 2 ] } <$csvFH>; print Data::Dumper->Dumpxs( [ \ %people ], [ qw{ *people } ] );