#!/usr/bin/perl use warnings; use strict; my @temp = qw( a_1 b_1 a_2 a_3 a_4 b_2 a_5 b_3 a_6 b_4 ); my %parts; push @{ $parts{ substr $_, 0, 1 }}, substr $_, 2 foreach @temp; use Data::Dumper; print Dumper \%parts;