Hi

I just realized that it's not possible to have independent each iterators for the same hash.

Is there any "lazy" alternative? I.e. w/o copying all keys in advance into an array?

Arrays are easier since the "keys" can be walked by incrementation like in c-style for-loop.

For illustration

DB<140> sub gen { my $href=shift; return sub { join " => ", each %$href } } DB<141> $iter1 =gen \%h; $iter2 =gen \%h DB<142> @h{a..d}=1..4 => (1, 2, 3, 4) DB<143> print &$iter1,"\t" for 1..3 a => 1 d => 4 c => 3 DB<144> print &$iter2,"\t" for 1..3 b => 2 a => 1 DB<145> print &$iter1,"\t" for 1..3 d => 4 c => 3 b => 2 DB<146> print &$iter2,"\t" for 1..3 a => 1 d => 4

It seems impossible to have independent iterators, and copying the keys in advance isn't really efficient...

I already tried aliasing and referencing the hash, w/o effect it's always the same iterator...

UPDATE

Furthermore, this can cause really ugly bugs ...

Cheers Rolf

( addicted to the Perl Programming Language)

PS:

lanx@nc10-ubuntu:~/perl$ perl -version This is perl, v5.10.0 built for i486-linux-gnu-thread-multi

In reply to Indepedent lazy iterators for the same hash? by LanX

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.