Your code doesn't run at all in fact. @array does not exist and your prototyped sub is declared too late for the prototype to be checked.
As already suggested use strictures (use strict; use warnings; - see The strictures, according to Seuss).
Don't use prototyped subs. In your sample code the prototype says "take no parameters" but @array is almost certainly intended to be a parameter (you surely aren't using global variables are you?).
A first cut at cleaning up the code could look like:
#!/usr/bin/perl use strict; use warnings; my @deck = qw(card1 card2 card3 card4); my @shuffle1 = shuffle (@deck); my @shuffle2 = shuffle (@shuffle1); print "@shuffle1\n"; print "@shuffle2\n"; sub shuffle { my $first = 0; my $last = $#_; my @newdeck; while ($first < $last) { push @newdeck, $_[$last--], $_[$first++]; } return @newdeck; }
Using a somewhat more Perlish (and probably harder to understand) approach to implementing shuffle may get you to:
sub shuffle { my @newdeck; push @newdeck, @_[-$_ - 1, $_] for 0 .. @_ / 2 - 1; return @newdeck; }
Both versions print:
card4 card1 card3 card2 card2 card4 card3 card1
In reply to Re: When function is executed twice I get the results from the first set in the second
by GrandFather
in thread When function is executed twice I get the results from the first set in the second
by gstoykov
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |