我只是注意到了由此产生的Catalyst.pl.这显然是某种未经注释的黑客攻击.设置这样的版本字符串有什么好处?我甚至无法弄清楚他们想要做什么.
our $VERSION = '0.01';
$VERSION = eval $VERSION;
Run Code Online (Sandbox Code Playgroud) Perl 5.10引入了一个合适的开关结构,given/when它似乎是一个强大的工具.
然而,目前perldoc perlsyn缺乏一些很好的例子.
最近我发现它很方便的一个案例是将它与文件测试操作符一起使用:
given (-d "foo/bar/") {
when (1) { ... } # defined is wrong as -d returns '' on a file.
default { ... }
}
Run Code Online (Sandbox Code Playgroud)
或者:
given ("foo/bar/") {
when (-d) { ... }
default { ... }
}
Run Code Online (Sandbox Code Playgroud)
对我来说,尤其是第一个版本看起来比if-else构造或使用三元运算符更好,当依赖于我需要在两种情况下执行操作的测试结果时.
这让我很奇怪,除了简单的回归智能匹配和避免过度if-elsif-elsif -...-其他结构之外,还有什么看起来很整洁?
我有一种预感,给予/什么时候可以聪明而不失清晰,但我没有任何好的例子.
令我惊讶的一件事是,你可以嵌套构造以及:
given ($filename) {
when (-e) {
when (-f) {
when (-z) { say "Empty file" }
default { say "Nonempty file" }
}
when (-d) {
when …Run Code Online (Sandbox Code Playgroud)