#!/usr/bin/env perl use strict; use warnings; use Data::Dump; my @array = ('a', 1, 2, 3, 4, 'b', 6, 7, 8); my %hash; my $key; for my $element (@array) { if ($element =~ /^\D$/) { $key = $element; } else { push @{$hash{$key}}, $element; } } dd \%hash; #### { a => [1 .. 4], b => [6, 7, 8] }