Terve. Eli yritän tarkistaa, että jos muuttuja lippu ei ole '' ja
lop muuttuja ei ole joko x, y tai z, niin tulostetaan virhettä.
En nyt saa mitenkään tehtyä tätä if-or lausetta:
pseudoa:
JOS muuttuja nimeltä lippu ne '' JA lop muuttuja ne (x TAI y TAI z ) {
Tulosta virhe!
koodina (perl)
if (($lippu ne '') && ($lop ne 'x' || 'y' || 'z')){ print "Virhe"; }
Eli tulostetaan virhe jos lippu ei ole '' (tyhjä) ja lop ei ole x, y tai z.
Missä menee pieleen?
Anteeksi meni väärälle alueelle
Kannattaa käyttää säännöllistä lauseketta:
if ($lippu ne '' and $lop !~ /^[xyz]$/) { print "Virhe"; }
Funktio. Kiitos vastauksesta.
Voitko vielä neuvoa, että miten säännöllisisssä lausekkaissa saan määriteltyä
x, y, ja z:n sijaan merkkijonoja?
Tein tyhmästi, kun en kirjoittanut oikeanlaista esimerkkiä:
Eli $lop olisi joko: ace, doc tai smil.
Vaikka näin:
if ($lippu ne '' and $lop !~ /^(ace|doc|smil)$/) { print "Virhe"; }
Tuhannet kiitokset funktio!
Pieleen menee siinä, että tuo ehtosi on ryhmiteltynä ($lop ne 'x') || ('y') || ('z'). Kuten tästä näkyy, haluamaasi lopputulokseen päästään lisäämällä muihinkin väleihin tuo "$lop ne".
Säännölliset lausekkeet tuskin selkeyttävät tai nopeuttavat koodia, luultavasti juuri toisin päin.
Metabolix kirjoitti:
Säännölliset lausekkeet tuskin selkeyttävät tai nopeuttavat koodia, luultavasti juuri toisin päin.
Nopeudella tuskin on kovin paljoa merkitystä tässä.
Kuvittelisin, että Perl-ohjelmoijat osaavat lukea säännöllisiä lausekkeita ihan sujuvasti. Ainakin minusta se on paljon selkeämpi kuin
if ($lippu ne '' and $lop ne 'ace' && $lop ne 'doc' && $lop ne 'smil') { print "Virhe"; }
Tosin jos käyttää Perl 6:tta tai esim. tätä lisäosaa Perl 5:een, saa tuostakin tavasta ihan selkeän:
if ($lippu ne '' and $lop ne all qw<ace doc smil>) { print "Virhe"; }
Aihe on jo aika vanha, joten et voi enää vastata siihen.