perl – 给定/何时存在什么样的整洁用例?

前端之家收集整理的这篇文章主要介绍了perl – 给定/何时存在什么样的整洁用例?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Perl 5.10引入了一个适当的开关结构,给定/何时,它似乎是一个强大的工具.

目前,perldoc perlsyn缺乏一些很好的例子.

最近发现的一个案例是使用文件测试运算符:

  1. given (-d "foo/bar/") {
  2. when (1) { ... } # defined is wrong as -d returns '' on a file.
  3. default { ... }
  4. }

或者:

  1. given ("foo/bar/") {
  2. when (-d) { ... }
  3. default { ... }
  4. }

对于我来说,特别是第一个版本看起来比一个if-else结构还是使用三元运算符,当依赖于测试的结果时,我需要在这两种情况下执行操作.

这让我想知道,除了简单的情况下,如果掉到智能匹配和避免超越if-elsif-elsif -… else结构,还有什么看起来整齐吗?

我有一个希望,给予/什么时候可以聪明,而不失去清晰度,但我没有任何好的例子.

有一件令我吃惊的事情是,你可以嵌套这个结构:

  1. given ($filename) {
  2. when (-e) {
  3. when (-f) {
  4. when (-z) { say "Empty file" }
  5. default { say "Nonempty file" }
  6. }
  7. when (-d) {
  8. when (-o) { say "Directory owned by me"}
  9. default { say "Directory owned by someone else" }
  10. }
  11. default { say "Special" }
  12. }
  13. default { say "No such file or directory" } }

解决方法

recent answer到Zaid的问题 Strategies to handle a file with multiple fixed formats中,我结束了一个可怜的人的yacc,其主循环搜索了一系列正则表达式进行了第一场比赛:
  1. while (<>) {
  2. given($_) {
  3. when (@{[ map $pattern{$_},@expect ]}) {}
  4. default {
  5. die "$0: line $.: expected " . join("|" => @expect) . "; got\n$_";
  6. }
  7. }
  8. }

在另一个问题中,David B wanted to match against multiple regexesmy answer uses smart matching隐含地循环使用正则表达式:

  1. #! /usr/bin/perl
  2.  
  3. use warnings;
  4. use strict;
  5.  
  6. use feature 'switch';
  7.  
  8. my @patterns = (
  9. qr/foo/,qr/bar/,qr/baz/,);
  10.  
  11. for (qw/ blurfl bar quux foo baz /) {
  12. print "$_: ";
  13. given ($_) {
  14. when (@patterns) {
  15. print "hit!\n";
  16. }
  17. default {
  18. print "miss.\n";
  19. }
  20. }
  21. }

猜你在找的Perl相关文章