我继承了一些人的代码,他们最喜欢的过去时间是将每一行缩短到绝对最小值(有时只是为了让它看起来很酷)。他的代码很难理解,但我设法理解(并重写)了大部分代码。这个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