in reply to Assign a hash to an array

You are clearing the hash and not the array also.

use warnings; use strict; use Data::Dumper; my $string = "column08=Submit & column10=Delivered & column09=Somethin +g"; my @matches = grep defined, split / ([|&]) /, $string; my %hash = (); my @return_array = (); my @symbol_array = (); # dead code foreach my $one (@matches) { if (($one =~ tr/=//) == 1) { my ($key,$value)=(split /=/,$one); %hash = (); @return_array = (); # clear the array also $hash{'term'}{$key} = $value; push (@return_array,%hash); } else # dead code { push (@symbol_array,$one); } } print Dumper \%hash; print Dumper \@return_array;

...