my %data; for my $k (keys %form) { # assumes all the keys are non-numbers followed by numbers my ($letters, $numbers) = $k =~ /(\D+)(\d+)/; $data{$numbers}{$letter} = $form{$k}; }