in reply to Re^4: Using 'each' to get random (key, value) pair from hash returns "uninitialized value"
in thread Using 'each' to get random (key, value) pair from hash returns "uninitialized value"

It did take a while, but I finally got it. The || creates boolean, i.e. scalar context. And each() in scalar context returns only the key and not the index.

  • Comment on Re^5: Using 'each' to get random (key, value) pair from hash returns "uninitialized value"

Replies are listed 'Best First'.
Re^6: Using 'each' to get random (key, value) pair from hash returns "uninitialized value"
by johngg (Canon) on Jan 29, 2011 at 18:53 UTC

    An excellent piece of detective work :-)

    So just grabbing the key alone and pulling the value manually will work.

    knoppix@Microknoppix:~$ perl -Mstrict -wE ' my %hash = ( one => q{ein}, two => q{zwei}, six => q{sechs}, ); say qq{@{ [ %hash ] }}; for ( 1 .. 9 ) { my $k = each %hash || each %hash; say qq{$_: $k => $hash{ $k }}; }' six sechs one ein two zwei 1: six => sechs 2: one => ein 3: two => zwei 4: six => sechs 5: one => ein 6: two => zwei 7: six => sechs 8: one => ein 9: two => zwei knoppix@Microknoppix:~$

    Thanks for clearing up the mystery.

    Update: Apologies to duelafn, I didn't see his post before making this essentially identical reply.

    Cheers,

    JohnGG

      Perfect - in a way this works even better for me since I don't really need the value - just the key anyway.
      And yes thanks to all for the incredible follow through and detective work.