2017-05-10 2 views
-3

Ich versuche, ein Perl-Programm zu schreiben. Der Kern des Programms ist das: Es gibt zwei Bedingungen.verschachtelt, wenn Anweisungen in Perl

Fall: 1) Wenn cond1 = wahr und cond2 == true dann werde ich überprüfen, ob $ a = 1, $ b = 1, $ c = 1 und $ d = 1. Wenn ja, wird etwas

if(($cond1 eq true) && ($cond2 eq true)) 
    { 
     if(($a=1) && ($b=1) && ($c=1) && ($d=1)) 
     { 
     print " Hey,it worked" ; 
     } 
     else 
    { 
     print "Test case failed" ; 
    } 
    } 

Fall gedruckt: 2) Wenn cond1 = true und cond2 = false dann muss ich a, b und c und d nicht nur für die Variablen überprüfen.

if(($cond1 eq true) && ($cond2 eq false)) 
{ 
    if(($a=1) && ($b=1) && ($c=1)) 
    { 
    print " Hey,it worked" ; 
    } 
    else 
    { 
    print "Test case failed" ; 
    } 
} 

Gehäuse: 3) Wenn cond1 = false dann muss ich nur für die Variablen a und b überprüfen.

if(($cond1 eq false)) 
    { 
     if(($a=1) && ($b=1)) 
     { 
     print " Hey,it worked" ; 
     } 
     else 
    { 
     print "Test case failed"; 
    } 
    } 

Ich habe es mit verschachtelten if-Anweisungen geschrieben. Aber das Programm ist zu lang geworden. Gibt es eine effektive Möglichkeit, das Programm mit speziellen Operatoren in Perl zu schreiben, so dass die Codelänge reduziert wird. Bitte helfen.

+3

Sie sollten immer streng verwenden 'verwenden; Verwenden Sie Warnungen qw (all); ', und Ihre letzten Änderungen an Ihrer Frage werden unter diesen Umständen nicht kompiliert. – ikegami

+1

Wenn Sie Ihre Frage weiter bearbeiten, machen Sie sie zumindest Perl. Wenn Sie damit nicht belästigt werden, korrigieren Sie die Zuweisungen in den Bedingungen. –

+2

Wird diese Frage in Perl geschrieben, oder ist es ein Pseudocode? –

Antwort

0
  • Sie haben viele Aufgaben (z $a=1), die Vergleiche sein sollte ($a==1).
  • Nicht explizit vergleichen mit 0 oder 1, wenn Sie booleans haben. Prüfe sie einfach auf Wahrheit.
  • if (X) { if (Y) { ... } } kann auf if (X && Y) { ... } geschrumpft werden.
  • Sie haben zu viele Parens.

In diesem Fall können Sie die folgende verwenden:

my $ok; 
if ($a && $b) { 
    if ($cond1) 
     if ($cond2) { 
     ++$ok if $c && $d; 
     } else { 
     ++$ok; 
     } 
    } else { 
     ++$ok if !$cond2 && $c; 
    } 
} 

say($ok ? "worked" : "didn't work"); 
+0

Vielen Dank für das Feedback. Ich habe die Frage bearbeitet. Wie Sie Ihren dritten Punkt, konnte ich nicht verkleinern, da es jetzt eine andere Bedingung hat –

+0

Meine Antwort aktualisiert, um die Änderungen an der OP zu reflektieren. – ikegami

+0

Ich hatte die Bedingungen falsch gelesen. Fest. – ikegami

Verwandte Themen