用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 (//..$) {} }