in reply to Hash in Array

If I understand your intent, you are having scoping problems. As I understand it, on each iteration of your @customer_count loop, you want to build a new hash. That means you are having a scoping issue. Rather than scoping the %customer_type hash at the script level, you want to declare the new object at the level where you want an empty, new version to appear. If that is unclear, you may garner insight from Private Variables via my(). In any case, one fix would be:

#!/usr/bin/perl use strict; use warnings; use Data::Dumper; #my %customer_type; #my @exist_customer_id; my @customer_id = ('E1', 'E2'); my @customer_count = ('1', '2'); my @customer_type; foreach (@customer_count){ my %customer_type; foreach(@customer_id){ #push(@exist_customer_id, $_); $customer_type{$_} = "valid"; } push(@customer_type, \%customer_type); } print STDOUT " VALUE " . Dumper(@customer_type);

Note as well my use of use strict;, which is generally considered to be a Good Thing(TM).