用givenwhen 构造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 (//..$)    {}
}
原文地址:https://www.cnblogs.com/tjxwg/p/2955956.html