Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re^2:problem using foreach and each with hash ref

by vinoth.ree (Parson)
on Aug 19, 2009 at 05:56 UTC ( #789694=note: print w/ replies, xml ) Need Help??


in reply to Re: What is happening ?
in thread problem using foreach and each with hash ref

The next time you call each you'll get the next pair out of the hash.

I get printed only, what the each returns and foreach get ends.

Update:
Title updated


Comment on Re^2:problem using foreach and each with hash ref
Re^3: What is happening ?
by goeb (Pilgrim) on Aug 19, 2009 at 06:06 UTC
    You most likely want to use something like this:
    while (($key, $value) = each %$hash_ref) { # do something... }
    An example like this is also mentioned in the documentation for each. tilly already explained the reason your loop ends after the first key and value.

      Is it possible to get each pair of key and value in foreach with each function ?

        each is an iterator. Foreach loops works on list. You're asking if it's possible to cut a piece of wood with a screwdriver.

        A foreach loop (whether using the for or foreach keyword) calls the list building expression once, and iterates over the resulting list.

        A C-style for loop (whether using the for or foreach keyword) could, since it's really a while loop with bells and whistles.

        Since you can probably cut a piece of wood with a screwdriver if you tried hard enough,

        for my $pair ( sub { my @pairs; while (my ($k,$v) = each %h) { push @pairs, [$k,$v] } @pairs }->() ) { my ($k,$v) = @$pair; ... }
        But using the appropriate tool is better.
        while (my ($k,$v) = each %h) { ... }
        or
        for my $k (keys %h) { my $v = $h{$k}; ... }
Re^3: What is happening ?
by tilly (Archbishop) on Aug 19, 2009 at 06:08 UTC
    Yes, executing that loop only called each once. But if after that loop you put a second loop that calls each, then that second loop will get a second pair out of the hash. Or if you try to iterate through with a while/each loop, you'll get every pair except the one already consumed in the for loop.

    In other words the hash has been left in a potentially bad state.

      OK thanks!

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://789694]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (4)
As of 2014-09-02 00:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite cookbook is:










    Results (18 votes), past polls