in reply to Re: removing the goto
in thread removing the goto

No need for the extra block:
use List::Util shuffle; @weighteddiv = shuffle @weighteddiv; @selected = (); xyz: foreach $i (0..$maxclients-1) { if ($#weighteddiv > = 0) { $idx=int(rand($#weighteddiv)); $selected[$i] = $weighteddiv[$idx]; if ($i>0) { foreach $j (0..$i-1) { if ($selected[$i] == $selected[$j]) { redo xyz; } } } } }

Replies are listed 'Best First'.
Re^3: removing the goto
by shmem (Chancellor) on Jun 01, 2007 at 19:14 UTC
    Erm... wasn't the goto label placed below the foreach in the OP, and a goto dinn' advance the iterator?

    --shmem

    _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                  /\_¯/(q    /
    ----------------------------  \__(m.====·.(_("always off the crowd"))."·
    ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}
      The point of redo is that it does not advance the iterator.
      The redo command restarts the loop block without evaluating the conditional again.
      my $redid = 0; my @list = (1..5); xyz : for (@list) { print; redo if $_ == 3 && ! $redid++; } # Output: 123345
        Thanks... now I got it *blush* - the difference between redo and next.
        Shame on me.

        --shmem

        _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                      /\_¯/(q    /
        ----------------------------  \__(m.====·.(_("always off the crowd"))."·
        ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}