On Friday, July 20, Ilya Sterin wrote:
>No, I don't think you are understanding it correctly.  It's not about
>looping sequentially, but rather simultaneouly, for comparison purposes.
>
>@foo = (1,2,3);
>@bar = (1,2,3);
>for my ($foo, $bar) (@foo, @bar)  #As the index for @foo increases, so 
>                                  #does @bar index
>{
>print "OK\n" if $foo == $bar;
>}
>
>Will print...
>OK
>OK
>OK
>
>Ilya

Yes, right. I'm saying that's very easy to code in perl 5.

    @foo = (1, 2, 3);
    @bar = (1, 2, 3);
    @baz = (1, 2, 3);
    $ai = aiter (@foo, @bar, @baz);
    while ( ($foo,$bar,$baz) = &$ai )
    {
        print "OK\n" if $foo == $bar  &&  $bar == $baz;
    }

>From my library:    (feel free to copy&paste into yours)

#--->     $array_iterator = aiter(@a, @b, @c, ...);
# aiter : Creates an array iterator to return the elements of a set of
# arrays in turn.  That is, the first time it is called, it returns
# the first element of each array.  The next time, it returns the
# second elements. And so on, until all elements are exhausted.
#
# This is useful for looping over more than one array at once:
#         $ai = aiter(@a, @b);
#         while ( ($a,$b) = $ai->() )   { .... }
sub aiter (\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@)
        {
        my @arr_list  = @_;     # The list of (references to the) arrays
        my $index     = 0;      # Which one the caller will get next
        my $max_num   = 0;      # Number of elements in longest array

        # Get the length of the longest input array
        foreach (@arr_list)
                {
                $max_num = @$_  if @$_ > $max_num;
                }

        # Return the iterator as a closure wrt the above variables.
        return sub
                {
                my $i = $index++;
                return ()  if $i >= $max_num;     # No more elements to return
                return map $_->[$i], @arr_list;   # Return ith elements
                }
        }

 ----------------------------------------------------------------------
 Eric J. Roode                                            [EMAIL PROTECTED]
 Senior Software Engineer, Myxa Corporation

Reply via email to