关闭

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

标签: perlc
378人阅读 评论(0) 收藏 举报
分类:

智能匹配

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:62918次
    • 积分:910
    • 等级:
    • 排名:千里之外
    • 原创:34篇
    • 转载:2篇
    • 译文:0篇
    • 评论:3条
    文章存档