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


in reply to More effective way to increase two elements of a list in parallel?

I see a few things, here.

First, you should always use:

use strict; use warnings; use diagnostics; # not everyone puts this in but I think it's helpful

But that's just general stuff. The big question I have is why use a while (especially with the -- eesh -- next statement) when an if is really what you want? Rewriting this using your (excellent) suggestion of the reformulated for:

foreach my $pdu_num (3 .. 8) { $pdu_num = 11 - $pdu_num unless defined $order; if (my $node = shift @nodes) { $map{$node} = $pdu . '['.$pdu_num.']'; } }

gives, I think, a much clearer chunk of code

--
Wade

Replies are listed 'Best First'.
Re^2: More effective way to increase two elements of a list in parallel?
by FunkyMonk (Chancellor) on May 06, 2008 at 23:05 UTC
    Note that
    if (my $node = shift @nodes) { $map{$node} = $pdu . '['.$pdu_num.']'; }

    is not the same as the OP's code. Your code won't process the if if the first element of @nodes is false. Better to use

    if (@nodes) { my $node = shift @nodes; $map{$node} = $pdu . '['.$pdu_num.']'; }


    Unless I state otherwise, all my code runs with strict and warnings