NOThing Is Impossible! —— 原创文章,谢绝转载!
sub shuffle 接受一个数组参数,返回一个将元素随机打乱后的列表。来源于 List::Util 模块。
sub shuffle(@) {
# 数组a由@_每个元素的引用组成,
#避免@_中变量的复制到@a而造成不必要的开销;
my @a = (@_);
my $n; #存放随机数
my $i = @a; # $i是数组的长度
map {
# 从0到$i之间随机选一个数,
#小于$i,所以不会是$i,并将$i减一,遍历@a的每个index。
$n = rand($i - -);
#从前$i个元素中随机选一个并返回,
#并将选中的这个用元素$a[$i]替换;
#这个表达式是一个列表,每次返回其第一个成员。
(${$a[$n]}, $a[$n] = $a[$i])[0];
} @a;
}