Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: multiple local vars in a foreach loop

by LanX (Canon)
on Jan 31, 2013 at 08:40 UTC ( #1016253=note: print w/ replies, xml ) Need Help??


in reply to multiple local vars in a foreach loop

The simple answer

my %hash=@keys;

already does what you want. =)

UPDATES

The long answer!

Regarding your initial question: "unfortunately not"!

Perl5 doesn't provide a built-in way to have multiple loop vars in foreach.

There are several workarounds with while loops:

  • destructive with splice or multiple shifts

  • iterator with List::MoreUtils::natatime() or pairwise()

  • classic with c-stile for with two index-increments per iteration

but these workarounds have been discussed so often in the monastery that I'd prefer to link them after finding them.

Splice

In this case (ignoring the solution on top) I would do something with splice:

DB<113> @array = (a =>1,b=>2) => ("a", 1, "b", 2) DB<114> while ( my ($key,$val) = splice(@array,0,2) ) { $hash{$key}=$val; } DB<115> \%hash => { a => 1, b => 2 } DB<116> \@array # emptied! => []

You need to copy @array in case I wanna keep the initial elements after the loop.

Older discussions

googling the monastery for splice+natatime

Cheers Rolf

Errata

Originally I proposed this code

while(@array) { $hash{shift @array} = shift @array; }

But I was bitten by precedence, the code does it the wrong way around:

DB<108> @array = ( a => 1, b => 2 ) => ("a", 1, "b", 2) DB<109> $hash{shift @array} =shift @array while @array DB<110> \%hash => { 1 => "a", 2 => "b" }


Comment on Re: multiple local vars in a foreach loop
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (13)
As of 2014-12-20 18:46 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (97 votes), past polls