in reply to Re: how can i return the common keys from a hash
in thread how can i return the common keys from a hash

I am somewhat puzzled by the following DWIM:

in scalar context, each returns the next key of the hash. Why doesn't, then, the assignment "my $m = each %$href" return false if the key is "0"? ie

> perl -wle 'my %a = ( 0 => 1, y => 2, z => 4); while (my $m = each %a +) { print $m }' y 0 z > perl -wle 'my @a = ( 0 => 1, y => 2, z => 4); while (my $m = pop @a) + { print $m }' 4 z 2 y 1 > perl -wle 'my @a = ( 0 => 1, y => 2, z => 4); while (my $m = shift @ +a) { print $m }' >

Replies are listed 'Best First'.
Re^3: how can i return the common keys from a hash
by imp (Priest) on Aug 05, 2006 at 01:42 UTC
    perl -MO=Deparse -wle 'my %a = ( 0 => 1, y => 2, z => 4); while (my $m + = each %a) { print $m }' BEGIN { $^W = 1; } BEGIN { $/ = "\n"; $\ = "\n"; } my(%a) = (0, 1, 'y', 2, 'z', 4); while (defined(my $m = each %a)) { print $m; }
    It checks for defined as the loop condition, not a true value.
      indeed, as that's what you want in 99% of the cases..
      I was mostly pointing out that it's neither logical, nor obvious from docs