Robię trochę Perla i widząc moje zagnieżdżone stwierdzenia "jeśli" doprowadza mnie do szału. Udało mi się zmniejszyć niektóre z nich z blokami strażniczymi w innej sekcji, ale utknąłem tutaj.Czy należy unikać zagnieżdżonych instrukcji if w Perlu?
Czy sądzisz, że mogę pozostawić kod w niezmienionym stanie, lub czy istnieje "właściwy" sposób na refaktoryzację? (Przyznaję również, że jest to relatywnie nowy produkt w Perlu).
To jest właściwie podprogram z pytaniem o dane wejściowe użytkownika dla każdego parametru listy (plik zewnętrzny). $ [3] jest pasującym wzorcem, $ [2] jest domyślną wartością dla rozważanego parametru (NULL, jeśli nie ma), $ _ [1] określa, czy jest obowiązkowe czy nie. "następna" instrukcja odnosi się do następnego odczytanego parametru (while loop).
Z pomocą wszystkich (dzięki!), Oto najnowsza wersja.
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 }
Co dokładnie doprowadza Cię do szaleństwa z powodu zagnieżdżonych? – innaM
Nie wiem, po prostu czuję, że istnieje inny sposób pisania tego ... –