Perl 5.10 ввел правильную конструкцию коммутатора с given/when
и он кажется мощным инструментом.
Однако в настоящее время perldoc perlsyn
не хватает хороших примеров.
В одном случае, когда я нашел его полезным, он использовал его с операторами проверки файлов:
given (-d "foo/bar/") {
when (1) { ... } # defined is wrong as -d returns '' on a file.
default { ... }
}
или, альтернативно:
given ("foo/bar/") {
when (-d) { ... }
default { ... }
}
Для меня, особенно первая версия выглядит лучше, чем конструкция if-else или использование тернарного оператора, когда в зависимости от результата теста мне нужно выполнять действия в обоих случаях.
Это заставило меня задуматься, хотя, что еще выглядит аккуратно, за исключением простого случая возврата назад к умному сопоставлению и избежания дополнительных структур if-elsif-elsif -...- else?
У меня есть предчувствие, которое дает/когда позволяет быть умным, не теряя ясности, но у меня нет хороших примеров.
Одна вещь, которая меня удивила, заключается в том, что вы можете также вложить конструкцию:
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" } }