[perl]配列をランダムに並べ替えます。 2008/10/03

Perlです。
配列をランダムに並べ替えます。
もとネタはPerlクック本です。

sub shuffle {
my $array = shift;
my $i;
for ($i = @$array; --$i;) {
my $j = int rand ($i+1);
next if $i == $j;
@$array[$i, $j] = @$array[$j, $i];
}
}

@array = ("10001", "10002", "10003");
print "@array\n";
shuffle(\@array);
print "@array\n";


僕のもっているPerlクック本ではレシピ4.17です。

次に配列の中に配列がある場合に、中の配列の値をシャッフルしてひとつにしてみます。
この機能の関数名をどうつけてよいのやら....
sub shuffle {
my $array = shift;
for ($i = @$array; --$i;) {
my $j = int rand ($i+1);
next if $i == $j;
@$array[$i, $j] = @$array[$j, $i];
}
}

#
sub a {
my $array = shift;
my $i;
foreach $item (@$array){
if(ref($item) eq 'ARRAY'){
shuffle($item);
$item = @$item[0];
}
}

}

$array = [["10001", "10002", "10003"], "10004", "1005"];
print "@$array\n";
a($array);
print "@$array\n";

: