use Data::Dumper; use strict; use warnings; open DATA, "<", "foo.dat"; my $data = {}; while (my $line = ) { my @columns = split /,/, $line; push @{$data->{$columns[0]}}, [$columns[1], $columns[2]]; } close DATA; print Dumper($data);