用given-when 构造switch语句

1. 更少的输入

use 5.010;
given ($dog) {
  when ('Fido')      {}
  when ('Rover')     {}
  when ('Spot')      {}
  default            {} ;

};

2. 智能匹配

use 5.010;

$dog ~~  /$regex/      #dog 能被正则表达式匹配
$dog ~~  %Dogs         #$dog 是%Dogs 中的键值
$dog ~~ @Dogs          #$dog 是@Dogs 中的元素
@Dogs ~~ /$regex/      #@Dogs中至少有一个元素与正则匹配
%Dogs  ~~ /$regex/     #%Dogs 中至少有个一key与正则匹配

 

3.多分在处理

use 5.010;
given ($dog) {
  when ('Fido')   { ...;break}
  when('Rover') {....;break}
  default           {...} ;
};

利用continue 语句,就可以使程序在当前when块运算后进入下一个when继续比较。

 

4.代码组合

可以在when之间自由输入任意代码,哪怕在中途修改主题变量也没问题

use 5.010;

my $dog = 'Spot' ;
given ($dog) {
  say "I am ....." ;
  when  (/o/){  ;coninue}
  say "....";
   when (/t/) {..;coninue}
   $_=tr/p/d/;
  when (/d/) (..;coninue)


};

 

5.对列表进行分支判断

在foreach 循环中我们也能用when,这和在given中相似,只不过它是依次从列表中取测试目标

use 5.010;

foreach (@array) {
  when (/....$/)  {}
  when (//..$)    {}
}
posted @ 2013-03-12 16:28  新闻官  阅读(218)  评论(0编辑  收藏  举报