Heredé un código de un chico cuyo tiempo pasado favorito era acortar cada línea a su mínimo absoluto (y algunas veces solo para que se vea bien). Su código es difícil de entender pero logré entender (y reescribir) la mayor parte.¿Cómo es que este código Perl selecciona dos elementos diferentes de una matriz?
Ahora he tropezado con un código que, sin importar cuánto lo intente, no lo entiendo.
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");
}
De lo que puedo entender, esto se supone que es algún tipo de aleatoriedad, pero nunca vi una forma más compleja para lograr la aleatoriedad. ¿O son erróneas mis suposiciones? Al menos, eso es lo que se supone que debe hacer este código. Seleccione 2 archivos aleatorios y cópielos.
NOTAS === ===
El Marco OSA es un marco de nuestra propia. Se nombran por sus contrapartes de UNIX y hacen algunas pruebas básicas para que la aplicación no tenga que preocuparse por eso.
Perl :: Tidy es una buena herramienta para reformatear el código. :) –