我繼承了一些人的代碼,他們最喜歡的過去時間是將每一行縮短到絕對最小值(有時只是爲了讓它看起來很酷)。他的代碼很難理解,但我設法理解(並重寫)了大部分代碼。這個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個隨機文件並複製它們。
=== NOTES ===
OSA框架是我們自己的框架。它們是以UNIX的對應名稱命名的,並進行一些基本的測試,以便應用程序無需爲此而煩惱。
Perl :: Tidy是重新格式化代碼的好工具。 :) – 2010-04-23 15:38:57