智能匹配
- 智能匹配符~~,是一种根据要匹配(比较,判断)的上下文进行自动功能选择的一个很灵活的操作符,它在不同的上下文环境中有着不同的作用。
- %a ~~ %b 哈希的键是否一致
- %a ~~ @b 至少%a中的一个键在列表@b中
- %a ~~ /Fred/ 至少一个键值匹配给定的模式
- %a ~~ 'Fred' 哈希中某一指定的键值$a{'Fred'}存在
- @a ~~ @b 数组是否相同
- @a ~~ /Fred/ 至少一个元素匹配给定的模式
- @a ~~ 123 至少一个元素转化后的数字是123
- @a ~~ 'Fred' 至少一个元素转换后为字符串是'Fred‘
- $name ~~ undef $name确实未定义
- $name ~~ /Fred/ 模式匹配
- 123 ~~ '123.0' 数字和字符串看起来是否相等
- 'Fred' ~~ 'Fred‘ 字符串是否完全相同
- 123 ~~ 456 是否大小相等
- %a ~~ %b 哈希的键是否一致
given-when
- 根据given的参数,执行模个when条件下的对应语句块。这是对应C中switch case的perl版。
given($argv[0]) { when (/Fred/i) {say "Name has fred in it !|} when (/^Fred/) {say "Name start with Fred !|} when ('Fred') {say "Name is Fred !|} default { say "I don't see Fred!"} } - given-when默认在执行完when子句后,会跳出不再匹配后面的when条件。如果要继续执行后面的语句则在when子句中加入continue;
- given-when在when子句进行匹配时,默认使用的是只能匹配。when的匹配方法还可以是一个返回值为真假的函数
- 当需要对多个项目进行匹配的时候可以用foreach+when的方式进行:
foreach(@names])
{
when (/Fred/i) {say "Name has fred in it !|; continue;}
when ($_ ~= /^Fred/) {say "Name start with Fred !|; continue;}
when ('Fred') {say "Name is Fred !|; }
default { say "I don't see Fred!";}
}