Я унаследовал некоторый код от парня, любимым прошлым временем которого было сокращение каждой строки до ее абсолютного минимума (а иногда и только для того, чтобы выглядеть круто). Его код трудно понять, но мне удалось понять (и переписать) большую часть его.Как этот код Perl выбирает два разных элемента из массива?
Теперь я наткнулся на кусок кода, который, как бы я ни старался, я не могу понять.
my @heads = grep {s/\.txt$//} OSA::Fast::IO::Ls->ls($SysKey,'fo','osr/tiparlo',qr{^\d+\.txt$}) ||();
my @selected_heads =();
for my $i (0..1) {
$selected_heads[$i] = int rand scalar @heads;
for my $j ([email protected]) {
last if (!grep $j eq $_, @selected_heads[0..$i-1]);
$selected_heads[$i] = ($selected_heads[$i] + 1) % @heads; #WTF?
}
my $head_nr = sprintf "%04d", $i;
OSA::Fast::IO::Cp->cp($SysKey,'',"osr/tiparlo/$heads[$selected_heads[$i]].txt","$recdir/heads/$head_nr.txt");
OSA::Fast::IO::Cp->cp($SysKey,'',"osr/tiparlo/$heads[$selected_heads[$i]].cache","$recdir/heads/$head_nr.cache");
}
Из того, что я могу понять, это должно быть какое-то случайных чисел, но я никогда не видел более сложный способ достижения случайности. Или мои предположения ошибочны? По крайней мере, это то, что должен делать этот код. Выберите 2 случайных файла и скопируйте их.
=== ПРИМЕЧАНИЯ ===
ОРД Framework является Framework нашей собственной. Они названы в честь их UNIX-аналогов и проводят базовое тестирование, чтобы приложение не нуждалось в этом.
Perl :: Tidy - отличный инструмент для переформатирования кода. :) –