http://www.perlmonks.org?node_id=83422


in reply to Idiom for looping thru key/value pairs

Please correct me if I'm wrong, but perhaps you could use splice ?

#!/usr/bin/perl -w use strict; my @list = ('1','val','2','val2','1','val3'); while((my $first, my $last) = splice(@list,0,2)) { print "$first -> $last \n"; }

HTH

Replies are listed 'Best First'.
Re: Re: Idiom for looping thru key/value pairs
by frag (Hermit) on May 26, 2001 at 02:15 UTC

    The problem with splice is that it would chop the values out of the original array, and he doesn't want to use a dupe.

    This might be the time to use old-timey C-style for:

    my @list = ('1','val','2','val2','1','val3'); my $self = { _subfields => [@list] }; my @subs; for (my $index = 1; $index < @{$self->{_subfields}}; $index+=2) { push @subs, ${$self->{_subfields}}[$index]; } # waa-la: print $_,"\n" foreach (@subs);
    It's ugly, but it avoids the duplication. For the cost of a scalar you could always use
    my $aryref = $self->{_subfields};
    instead.

    -- Frag.