my @data; for my $set (split /#/, $patterns) { my @vals = split /\s+/, $set; my %hash; for my $i (0 .. $#vals) { $hash{$names[$i]} = $vals[$i]; } push @data, \%hash; } #### my @data; for ( split /#/, $patterns ) { my %hash; @hash{ @names } = split; push @data, \%hash; }