В 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" } }