in reply to Accessing HASH pushed into @array ('strict refs' in use error)

Hello sbrothy, and welcome to the Monastery!

To expand on dave_the_m’s answer:

Step 4 of the Basic debugging checklist says: “Dump arrays, hashes and arbitrarily complex data structures.” Using the core Data::Dumper module to print out the contents of @array, we see that after the first push the array contains 4 elements, which Data::Dumper names $VAR1 to $VAR4:

$VAR1 = 'CLIENT_PATH'; $VAR2 = 'PATH: 0'; $VAR3 = 'CLIENT_NICK'; $VAR4 = 'NICK: 0';

That’s because push puts its argument(s) (following the destination array) into list context, and a hash in list context returns a list of the form (key-x, val-x, key-y, val-y, ...). But when a reference to the hash is pushed instead, the result of the first push is:

$VAR1 = { 'CLIENT_PATH' => 'PATH: 0', 'CLIENT_NICK' => 'NICK: 0' };

— which shows that only one element ($VAR1) has been pushed onto the array; and this time its referent retains its identity as a hash.

Some useful reading: perlreftut and perldsc.

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: Accessing HASH pushed into @array ('strict refs' in use error)
by sbrothy (Acolyte) on Jan 09, 2014 at 17:41 UTC
    Yes. I've taken Data::Dumper to my chest. Thanks for the tip. I'm still looking for a decent TRACE module. Something along the lines og ASSERT and TRACE from Visual C++. I'm trying out Smart::Comments but I dunno...