Estoy haciendo algo de Perl y ver mis declaraciones "si" anidadas me está volviendo loco. Logré reducir algunos de ellos con bloques de guardia en otra sección, pero estoy atrapado aquí.¿Debo evitar declaraciones anidadas si en Perl?
¿Cree que puedo dejar el código como está, o existe una forma "adecuada" de refactorizar lo siguiente? (También reconozco que soy relativamente nuevo en Perl)
Esto es realmente una subrutina que solicita la entrada del usuario en cada parámetro de una lista (archivo externo). $ [3] es el patrón coincidente, $ [2] es el valor predeterminado para el parámetro considerado (NULL si no hay ninguno), $ _ [1] especifica si es obligatorio o no. la instrucción 'siguiente' se refiere al siguiente parámetro leído (while loop).
Con la ayuda de todos (gracias!), Aquí está la última versión.
100 if ($input ne '' && ($input !~ $match || $input =~ /'.+'/)) {
101 print "! Format not respected. Match : /$match/ (without \' \')\n";
102 next;
103 }
104 if ($input eq '') {
105 if ($default eq 'NULL') {
106 if ($manda eq 'y') {
107 print "! Mandatory parameter not filled in\n";
108 next;
109 }
110 print "+ Ignoring parameter.\n";
111 $input = '';
112 }
113 else {
114 print "+ Using default value\n";
115 $input = $default;
116 }
117 }
98 if($input eq ''){
99 if($_[2] eq 'NULL'){
100 if($_[1] eq 'y'){
101 print "! Mandatory parameter not filled in\n";
102 next;
103 }
104 else{
105 print "+ Ignoring parameter.\n";
106 $input = '';
107 }
108 }
109 else{
110 print "+ Using default value\n";
111 $input = $_[2];
112 }
113 }
114 elsif($input !~ $_[3] || $input =~ /'.+'/){
115 print "! Format not respected. Match : /$_[3]/ (without \' \')\n";
116 next;
117 }
118 }
¿Qué es específicamente lo que te está volviendo loco acerca de esos if anidados? – innaM
No sé, solo siento que hay otra forma de escribir eso ... –