Perl语言入门(第五版) 读书笔记(九)---智能匹配与given-when结构

第十五章 智能匹配与given-when结构 (use 5.010;新特性)
1. 智能匹配操作符(~~)能够根据操作数自动判断并进行操作。
2. 智能匹配操作符的优先级
 %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' 数字和(看起来numish的)字符串是否大小相等
 /Fred/ ~~ /Fred/ 字符串是否完全相同
 123 ~~ 456 是否大小相等
 
 当使用只能匹配操作符时,Perl会按此表自上而下查看使用的操作数,先找到哪一种匹配就选择对应的操作.
 当两个标量以字符串的形式存储像'123','3.14149'这些数字的时候,使用智能匹配操作符进行比对时会默认将这些字符串转换为数字,然后在进行比对.

 say "I found Fred in the name!\n" if $name ~~ /Fred/;
 say "I found a key matching 'Fred'" if %names ~~ /Fred/;
 say "The arrays have the same elements\n" if @names1 ~~ @names2;

3. given-when结构
 类似于C语音的switch-case,但是功能比其强。
 use 5.010;
 given( $ARGV[0] ) {  #given语句包含在foreach中时,可以省略
  when( $_ ~~ /fred/i ) { say 'Name has fred in it'; } #可以没有continue或break
  say "Processing";  #还可以使用when以外的语句
  when( $_ ~~ /^Fred/ ) { say 'Name starts with Fred'; continue } #continue 结束当前when,进行下一个when
  when( $_ ~~ 'Fred' ) { say 'Name is Fred'; break } # break 跳出given-when结构
  default { say "I don't see a Fred" }
 }

你可能感兴趣的:(Perl语言入门(第五版) 读书笔记(九)---智能匹配与given-when结构)