Beitrag von hempelr (1976 Beiträge) am Freitag, 1.Juli.2005, 19:22.
@Perler - Schleife in ner Abfrage einer Bedingungskette möglich?
wahrscheinlich etwas blöd ausgedrückt - habe folgendes Problem:
Es soll ein Anweisungsblock nur ausgeführt werden, wenn ein Wert in einer Liste von Variablen einen Wert hat, ansonsten soll der Anweisungsblock übersprungen werden.
Da aber die Menge der zu überprüfenden Elementen erst zur Laufzeit generiert wird, meine Frage, ob es irgendwie geht, in ein if() ein foreach mit oder-Verknüpfung eizubauen; also im Klartext:
wenn eine Variable mit Namen aus der Liste @listenname einen Wert besitzt, dann tue etwas.
Klar, man könnte ein Flag in ner foreach-Schleife bei gefundenem Wert und anschließendem Verlassen der Schleife setzen - aber vielleicht kann man ja den Umweg sparen?
---schnipp
@l_vnamen = ("var1","var2","var3","var4","var5");
foreach my $t($l_vnamen){
if ($$t > 0){
$flag = 1;
last;
}
}
if ($flag > 0){
...tue was...
}
---schnapp
Danke für Tipp
Antworten
Beitrag von Pouraga (1396 Beiträge) am Freitag, 1.Juli.2005, 21:50.
Re: @Perler - Schleife in ner Abfrage einer Bedingungskette möglich?
Ich "hashe" bei solchen sachen einfach das array.
Oder bzw erstelle ich das sofort als hash (sofern es auf die reihenfolge nicht ankommt)
z.B.
@l_vnamen = ("var1","Dieter","var3","var4","var5");
my %t = map {$_ => 1} @l_vnamen;
if (exists $t{"Dieter"}){
...
}
Das geht bestimmt auch in einer zeile (ohne %t) aber bin nicht so der Schachtelexperte (frag mal cristoph ;))
Ob das jetzt aber effektiv als ne schleife ist weiss ich nicht (wenn man es nicht gleich als hash erstellen kann, dann brauch das auf jeden fall mehr Speicher). Braucht sowas noch nicht für wiklich grosse arrays wo das von intresse würde.
Antworten
Beitrag von Pouraga (1396 Beiträge) am Freitag, 1.Juli.2005, 22:10.
Re: @Perler - Schleife in ner Abfrage einer Bedingungskette möglich?
Hab nochmal gelesen
geht es bei l_vnamen nur um boolean werte?
Dann (und theoretisch eigentlich auch für text) kannst das z.B. so machen:
@l_vnamen = ("var1","Diter","var3","var4","var5");
if (index (join("#",@l_vnamen), "Dieter") >= 0){
}
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 1.Juli.2005, 22:39.
Re: @Perler - Schleife in ner Abfrage einer Bedingungskette möglich?
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Samstag, 2.Juli.2005, 03:01.
Re: @Perler - Schleife in ner Abfrage einer Bedingungskette möglich?
Antworten
Beitrag von hempelr (1976 Beiträge) am Samstag, 2.Juli.2005, 10:50.
Neue Frage - Div. durch Null verh. - Re: @Perler - Schleife in ner Abfrage
danke an alle - Denkanstöße angekommen und verarbeitet ;-)
Gleich mal noch ne neue Frage, wie verhindert man denn sinnvoll und einfach ne Division durch Null, wenn die Divisoren erst zur Laufzeit generiert werden ?
Hats da nen Trick bzw. irgendwie ne Abfangroutine oder muss man das immer explizit für jede Division auf "nicht Null" abfragen?
Danke für Tipp
Antworten
Beitrag von Sander (8133 Beiträge) am Samstag, 2.Juli.2005, 18:37.
Re: @Perler - Schleife in ner Abfrage einer Bedingungskette möglich?
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Samstag, 2.Juli.2005, 19:35.
Re: @Perler - Schleife in ner Abfrage einer Bedingungskette möglich?
Die Listenelemente werden durch das Leerzeichen getrennt, d.h. wenn man weiss dass keine Leerzeichen in den Elementen vorkommen, dann gehts... Ansonsten kann man mit $" ein anderes Zeichen bestimmen, z.b. $"="*"; den *, dann wäre die Abfrage if(index("*@array*", "*$wert*"); Aber wenn das mit dem grep klappt, ist das natürlich besser ;-)
Antworten