#! perl use strict; use warnings; use Data::Dumper; my @transactions = ( 'yadda 01 abc', 'yadda 03 sss', 'yadda 02 asdsdbc', 'yadda 02 adfgbc', 'yadda 01 abgxvc', 'yadda 02 azdfbc', 'yadda 04 azdfbc', 'yadda 04 abdc', ); my %results; foreach (@transactions) { my ($number) = /\s(\d+)\s/; push @{$results{$number}}, $_; } print Dumper \%results; #### $VAR1 = { '01' => [ 'yadda 01 abc', 'yadda 01 abgxvc' ], '03' => [ 'yadda 03 sss' ], '04' => [ 'yadda 04 azdfbc', 'yadda 04 abdc' ], '02' => [ 'yadda 02 asdsdbc', 'yadda 02 adfgbc', 'yadda 02 azdfbc' ] };