in reply to Elegance, dammit!

first pass
while (@array) { my ($key, @vals) = splice @array, 0, 3; $hash{$key} = [ @vals ]; }
assuming you no longer need the original array once you're done.