Perl 5.10 führte ein richtiges Switch-Konstrukt mit given/when
ein und es scheint ein mächtiges Werkzeug zu sein.Welche sauberen Anwendungsfälle gibt es für gegeben/wann?
Gegenwärtig fehlen jedoch perldoc perlsyn
einige gute Beispiele.
Ein Fall, in dem ich es praktisch, fand in letzter Zeit für war es mit Dateitest Operatoren:
given (-d "foo/bar/") {
when (1) { ... } # defined is wrong as -d returns '' on a file.
default { ... }
}
oder alternativ:
given ("foo/bar/") {
when (-d) { ... }
default { ... }
}
Für mich, vor allem die erste Version sieht besser aus als eine if Konstruieren oder verwenden Sie den ternären Operator, wenn ich abhängig vom Ergebnis des Tests in beiden Fällen Aktionen ausführen muss.
Es hat mich jedoch wundern, was sonst sieht ordentlich aus jenseits des einfachen Falles zurück zu Smart-Matching und Vermeidung von überlangen If-elsif-elsif -...- sonst Strukturen?
Ich habe eine Ahnung, dass gegeben/wann es möglich ist, schlau zu sein, ohne an Klarheit zu verlieren, aber ich habe keine guten Beispiele.
Eine Sache, die mich aber überrascht, ist, dass man Nest das Konstrukt als gut:
given ($filename) {
when (-e) {
when (-f) {
when (-z) { say "Empty file" }
default { say "Nonempty file" }
}
when (-d) {
when (-o) { say "Directory owned by me"}
default { say "Directory owned by someone else" }
}
default { say "Special" }
}
default { say "No such file or directory" } }
Sie können '-f _', '-z _', '-d _' und '-o _' verwenden, um den Aufruf von' stat' zu vermeiden Die selbe Datei '-e' hat es angerufen. Weitere Informationen finden Sie unter ['perldoc -f -X'] (http://perldoc.perl.org/functions/-X.html). –
In der Tat ist es normalerweise eine gute Idee, das zwischengespeicherte Formular zu verwenden. Ich wollte das Beispiel nicht mit nicht verwandten Dingen überkomplizieren. Es spielt sowieso selten eine Rolle für die Performance ... – szbalint
'-d' umfasst' -e' und '-f' umfasst' -e', es gibt keinen Grund, '-e' zu testen, außer'! -f &&! -d' , es würde nichts ändern, um nur anzunehmen, dass in diesem Fall, wenn "-e", dann ist es besonders. – Axeman