nochmal zum Thema if/elsif/else
Alain
- perl
0 Christian Kruse0 Alain0 Christian Kruse0 Alain0 Christian Kruse0 Alain
hallo,
Hab grade im Archiv danach gesucht weil ich in selfhtml nicht ganz schlau wurde :)
und ein Beispiel gefunden http://forum.de.selfhtml.org/archiv/2004/1/t69241/
meine frage zu dem beispiel:
if() { }
elsif() { }
elsif() { }
elsif() { }
else { }
beziehen sich die "elsif" nun auf die eine erste "if" abfrage oder werden die
so oder so unabhängig vom ersten if abgefragt?
Ich frage mich sowieso für was elsif denn gut sein soll?
Kann man nicht einfach
if() { }
if() { }
if() { }
if() { }
else { }
schreiben?
Grüsse
Alain
Hallo Alain,
if() { }
elsif() { }
elsif() { }
elsif() { }else { }
beziehen sich die "elsif" nun auf die eine erste "if" abfrage oder werden die
so oder so unabhängig vom ersten if abgefragt?
Wenn die Bedingung im ersten if() fehlschlaegt wird der Reihe nach das elsif() ausgefuehrt,
bis auf eine Bedingung getroffen wird, die passt.
Ich frage mich sowieso für was elsif denn gut sein soll?
Kann man nicht einfach
if() { }
if() { }
if() { }
if() { }
else { }schreiben?
Das ist semantisch ein Unterschied. Hier werden in jedem Fall alle if() ausgewertet.
Aequivalent waere das so:
if() {
}
else {
if() {
}
else {
if() {
}
else {
if() {
}
else {
}
}
}
}
Grüße,
CK
Hallo,
Wenn die Bedingung im ersten if() fehlschlaegt wird der Reihe nach das elsif() ausgefuehrt,
bis auf eine Bedingung getroffen wird, die passt.
hmmm,komisch,so nachdem was ich gelesen habe,dachte ich eher umgekehrt,wenn das erste if fehlschlägt
dann werden die elsif übersprungen?!
Ich frage mich sowieso für was elsif denn gut sein soll?
Kann man nicht einfach
if() { }
if() { }
if() { }
if() { }
else { }schreiben?
Das ist semantisch ein Unterschied. Hier werden in jedem Fall alle if() ausgewertet.
Aequivalent waere das so:if() {
}
else {
if() {
}
else {
if() {
}
else {
if() {
}
else {
}
}
}
}
und wenn man das so schreibt:
if (){
if () {
if () {
mach was
}}}
else {
sonst das
}
ich dachte das wäre dasselbe wie elsif für die zwei unteren ifs?
Grüsse
Alain
Hallo Alain,
Wenn die Bedingung im ersten if() fehlschlaegt wird der Reihe nach das elsif()
ausgefuehrt, bis auf eine Bedingung getroffen wird, die passt.hmmm,komisch,so nachdem was ich gelesen habe,dachte ich eher umgekehrt,wenn das erste
if fehlschlägt dann werden die elsif übersprungen?!
Nein.
ckruse@skuld latex $ perl test.pl
if
elsif 1
ckruse@skuld latex $ cat test.pl
#!/usr/bin/perl -w
if(1) {
print "if\n";
}
elsif(1) {
print "elsif 1\n";
}
elsif(1) {
print "elsif 2\n";
}
else {
print "else\n";
}
if(0) {
print "if\n";
}
elsif(1) {
print "elsif 1\n";
}
elsif(1) {
print "elsif 2\n";
}
else {
print "else\n";
}
ckruse@skuld latex $
Aber warum probierst du das nicht einfach selber aus?
Das ist semantisch ein Unterschied. Hier werden in jedem Fall alle if() ausgewertet.
Aequivalent waere das so:if() {
}
else {
if() {
}
else {
if() {
}
else {
if() {
}
else {
}
}
}
}und wenn man das so schreibt:
if (){
if () {
if () {
mach was
}}}
else {
sonst das
}
Ist das zwar syntaktisch richtig, aber semantisch was anderes.
ich dachte das wäre dasselbe wie elsif für die zwei unteren ifs?
Nee.
Grüße,
CK
Hallo CK,
Wenn die Bedingung im ersten if() fehlschlaegt wird der Reihe nach das elsif()
ausgefuehrt, bis auf eine Bedingung getroffen wird, die passt.if(1) {
print "if\n";
}
elsif(1) {
print "elsif 1\n";
}
elsif(1) {
print "elsif 2\n";
}
else {
print "else\n";
}
Achso?! ich glaub ich versteh jetzt,wenn das erste if fehlschlägt,dann eines der elsif zutrifft
wird keine weitere abfrage gemacht egal ob dann mal wieder ein if oder elsif kommt - stimmts?
Bei if werden alle abgefragt im zweig (in Deinem beispiel oben)
Aber warum probierst du das nicht einfach selber aus?
hab ich ,aber werd trotzdem nicht schlau daraus :/ Ich hatte ein problem mit einem script
wo ich mir nicht sicher war ob ich jetzt elsif oder if schreiben soll,weil ein benutzer probleme hatte damit.
Ich hatte einige ifs drinnen,die alle nicht zutreffen durften und in dem letzteren sollte oder musste das if zutreffen.
Das sah in etwa so aus:
if ()
{
falsch
}
if ()
{
falsch
}
#und jetzt muss es zutreffen
elsif (($dies eq 'richtig')and ($das eq 'richtig'))
{
super alles ok
}
else
{
falsch
}
Hab das elsif nun auf if abgeändert.
Grüsse
Alain
Hallo Alain,
Wenn die Bedingung im ersten if() fehlschlaegt wird der Reihe nach das elsif()
ausgefuehrt, bis auf eine Bedingung getroffen wird, die passt.if(1) {
print "if\n";
}
elsif(1) {
print "elsif 1\n";
}
elsif(1) {
print "elsif 2\n";
}
else {
print "else\n";
}Achso?! ich glaub ich versteh jetzt,wenn das erste if fehlschlägt,dann eines der
elsif zutrifft wird keine weitere abfrage gemacht egal ob dann mal wieder ein if oder
elsif kommt - stimmts?
Hae? Iwo.
if(falsch) {
## hier wird nicht ausgefuehrt
}
elsif(wahr) {
# hier schon
}
elsif(wahr) {
# hier nicht
}
else {
# auch nicht
}
if(wahr) {
# hier schon
}
elsif(wahr) {
# hier nicht
}
else {
# hier auch nicht
}
if(falsch) {
# nicht ausgefuehrt
}
elsif(falsch) {
# nicht ausgefuehrt
}
else {
# hier wird ausgefuehrt
}
Grüße,
CK
Hallo CK,
Hae? Iwo.
if(falsch) {
## hier wird nicht ausgefuehrt
}
elsif(wahr) {
# hier schon
}
elsif(wahr) {
# hier nicht
}
else {
# auch nicht
}
eben doch so wie ich jetzt verstanden habe :)
also wenn eine der elsif stimmt,
die anderen elsif,die folgen gar nicht mehr abgefragt werden.
Naja,man könnte das trotzdem auch mit if tun und wenn eine angabe stimmt
mit exit beenden,wär dann dasselbe.
Jedenfalls danke für die ausführung.
Grüsse
vom Alain