in reply to Re^2: Incrementing string arrays when used with foreach loops
in thread Incrementing string arrays when used with foreach loops

That kinda backwards thinking for a deck of cards. The normal thought process involves shuffling the deck then drawing from the top.

use strict; use warnings; use List::Util qw( shuffle ); my @cards; for my $suit (qw(_clb _dmd _hrt _spd)) { for my $rank (2 .. 10, qw(j q k a)) { push @cards, $rank . $suit; } } my @deck = shuffle @cards; for (1 .. 10) { print(shift(@deck), "\n"); }

Replies are listed 'Best First'.
Re^4: Incrementing string arrays when used with foreach loops
by toolic (Bishop) on Sep 11, 2008 at 03:05 UTC
    I completely agree that using shuffle is a superior solution, but I was trying to illustrate a use of rand, according to the OP's recipe:
    c. The rand() function will be used to get a random card from the pack
Re^4: Incrementing string arrays when used with foreach loops
by hangon (Deacon) on Sep 12, 2008 at 09:25 UTC

    Wouldn't shift actually be considered dealing from the bottom of the deck? ;-}

      I associate the top of the deck with the start of the deck, and thus the start of the array. And I usually see push/shift used for queues, not unshift/pop. There's nothing stopping you from using the latter, but you have to start using negative offsets to index and splice the array.

        Last I checked, push was substantially faster than unshift, which is a pretty good argument for using push/shift rather than unshift/pop.

        The first time I checked, the difference was O(1) vs O(n). I fixed that to O(1) for both, but with a significantly worse constant on unshift.