Tengo una pregunta con respecto a los bloques de código en Perl. Dado el siguiente código:bloques de código perl
my @newArr = sort { $a <=> $b } @oldArr;
usa un bloque de código como argumento.
pude volver a escribir como:
sub sortFunc {
return $a <=> $b;
}
my @newArr = sort sortFunc @oldArr;
Estoy tratando de averiguar cómo funciona este mecanismo. Actualmente necesito implementar una clase de función de clasificación compleja que se vea desordenada en un bloque de código. Sin embargo, depende de algunas variables locales. Por ejemplo:
foreach my $val (@values){
my @newArr = sort { $hash{$a}{$val}<=> $hash{$b}{$val} } @oldArr;
...
}
pero supongamos que la función de clasificación es más complejo, por lo que no lo puedo encajar perfectamente en el código de seguridad.
Si trato de usar una función (definida localmente en el alcance del bucle for), sigo recibiendo "Uso del valor no inicializado en el elemento hash".
Supongo que se debe a que el sub se analiza una vez y no se vuelve a crear para la iteración Evry del ciclo for. Estoy tratando de entender cómo implementar un bloque de código que sería reinterpretado en cada iteración, o tal vez cómo pasar los parámetros
'mi @newArr = especie {$ a $ b} <=> @oldArr;' ¿qué significa el @oldArr acuerdo con esto? –
"pero supongamos que la función de clasificación es más compleja" -> tal vez debería publicar su código para esta función de clasificación. – TLP