#!perl use Data::Dumper; $rows = [[qw(1234 foo fooval)],[qw(1235 bar barval)],[qw(1234 quux quuxval)]]; my %hash; for (@$rows) { push @{$hash{$_->[0]}} , { option => $_->[1] , option_data => $_->[2] } ; } print Dumper(\%hash);