前回と同じ値だからといって再度乱数を発生させると、ループがかさばる可能性もあるですよ。

my @dice_seed = (1..6);
my @dice_rand;
for(reverse (0..$#dice)){
push @dice_rand, splice @dice_seed, rand $_, 1;
}
みたいな。。。