use strict; use warnings; use Data::Dumper; my $str = 'Happy Joy 002245:Dubloons 002256:hats 034523:paper clips 232344:pants 233394'; my %capture = $str =~ /(\D*?)\s+(\d+):?/g; print Dumper(\%capture);