Perl 学习笔记(10)-- 智能匹配和given-when

智能匹配

  • 智能匹配符~~,是一种根据要匹配(比较,判断)的上下文进行自动功能选择的一个很灵活的操作符,它在不同的上下文环境中有着不同的作用。
    • %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 是否大小相等

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!";}
    }

你可能感兴趣的:(c,perl)