#!/usr/bin/perl use strict; my @deck; my $next = 0; # Initialize the suit hash my @suits = ("H", "S", "C", "D"); my @cards = ("A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"); my %values = ( "A" => 11, "2" => 2, "3" => 3, "4" => 4, "5" => 5, "6" => 6, "7" => 7, "8" => 8, "9" => 9, "10" => 10, "J" => 10, "Q" => 10, "K" => 10); sub shuffle { # Shuffle the deck my @check = (0)x52; my $choice; for (my $i = 0; $i < 52; $i++) { do { $choice = int(rand()*52); } while ($check[$choice]); $check[$choice] = 1; $deck[$i] = $choice; } } sub card_value { my ($offset) = @_; my $card = $deck[$offset] % 13; my $suit = int($deck[$offset] / 13); return ($values{$cards[$card]}); } sub card_face { my ($offset) = @_; my $card = $deck[$offset] % 13; my $suit = int($deck[$offset] / 13); my $face = "$cards[$card]$suits[$suit]"; return ($face); } sub deal { if ($next == 0) { shuffle(); } if ($next == 52) { shuffle(); $next = 0; } return($deck[$next++]); } for (my $i = 0; $i < 52; $i++) { my $c = deal(); printf "%s = %s\n", card_face($c), card_value($c); }