%out = (); for (@in){ if (/^([A-Za-z_]+)(\d+)$/){ # build hash of arrays # with alpha part uppercase:original as key push @{$out{join ':',uc $1,$1}},$2; } else { warn "\nInput data error <$_>\n"; } } #### blank_5_str_1 blank_5_str_10 blank_5_str_11 blank_5_str_12 blank_5_str_13 blank_5_str_14 blank_5_str_2 blank_5_str_3 blank_5_str_4 blank_5_str_5 blank_5_str_6 blank_5_str_7 blank_5_str_8 blank_5_str_9 #### blank_5_str_1 blank_5_str_2 blank_5_str_3