my @array; for ( 0 .. 5) { my $foo; $foo->{x} = $_; print "$foo->{x} - (Foo = " . $foo . ")\n"; push @array, $foo if (defined($ARGV[0])); } for (my $y = 0; $y < scalar(@array); $y++) { print "Stored Value at $y: $array[$y]->{x}\n"; } =pod When run without $ARGV[0] being defined: 0 - (Foo = HASH(0x182f168)) 1 - (Foo = HASH(0x182f168)) 2 - (Foo = HASH(0x182f168)) 3 - (Foo = HASH(0x182f168)) 4 - (Foo = HASH(0x182f168)) 5 - (Foo = HASH(0x182f168)) and with it defined: 0 - (Foo = HASH(0x182f168)) 1 - (Foo = HASH(0x1825490)) 2 - (Foo = HASH(0x18254d8)) 3 - (Foo = HASH(0x1825520)) 4 - (Foo = HASH(0x1825568)) 5 - (Foo = HASH(0x18255b0)) Stored Value at 0: 0 Stored Value at 1: 1 Stored Value at 2: 2 Stored Value at 3: 3 Stored Value at 4: 4 Stored Value at 5: 5 =cut