Tôi đã thừa kế một số mã từ một chàng trai có thời gian yêu thích trong quá khứ là rút ngắn mọi dòng xuống mức tối thiểu tuyệt đối (và đôi khi chỉ để làm cho nó trông thật tuyệt). Mã của anh ấy rất khó hiểu nhưng tôi đã hiểu (và viết lại) phần lớn nó.Mã Perl này chọn hai phần tử khác nhau từ một mảng như thế nào?
Bây giờ tôi đã tình cờ gặp một đoạn mã, dù tôi cố gắng thế nào đi nữa, tôi không thể hiểu được.
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");
}
Từ những gì tôi có thể hiểu, đây được cho là một loại ngẫu nhiên, nhưng tôi chưa bao giờ thấy một cách phức tạp hơn để đạt được sự ngẫu nhiên. Hay giả định của tôi sai? Ít nhất, đó là những gì mã này được cho là phải làm. Chọn 2 tệp ngẫu nhiên và sao chép chúng.
=== GHI CHÚ ===
Khung OSA là khung của chính chúng tôi. Chúng được đặt tên theo các đối tác UNIX của chúng và thực hiện một số thử nghiệm cơ bản để ứng dụng không cần phải bận tâm với điều đó.
Perl :: Tidy là công cụ tuyệt vời để định dạng lại mã. :) –