Perl 6 中的 Subset

简书对插入代码支持的不给力啊。 Perl 6 语法肯定识别不出, 但是空格对齐也不给力啊。

Subset 可用于声明某一类型的子集。

输入一个密码, 要求密码必须满足如下条件:

1、 至少 8 位
2、 必须包含大写字母、小写字母 和 数字

use v6; 

 subset Length8      of Str where *.chars < 8;
 subset UpCase       of Str where none('A'..'Z')  ∈ *.comb.Set;
 subset LowerCase    of Str where none('a'..'z')  ∈ *.comb.Set;
 subset IntNumber    of Str where none('0'..'9')  ∈ *.comb.Set;

 my $guess = prompt('Enter your password:');
    
 given $guess {
     when Length8     { say '密码长度必须为 8 位 以上'; proceed }
     when  UpCase     { say '密码必须包括大写字母';     proceed } 
     when LowerCase   { say '密码必须包含小写字母';     proceed }
     when IntNumber   { say '密码必须包含数字';                }   
 }

该程序具有可扩展性, 要增加一种密码验证, 只有添加一个 subset 就好了,然后在 given/When 里面增加一个处理。

proceed :vi. 前进; 继续下去。
proceed 相当于 continue, 不像 C 里面的 falling through, Perl 6 里面的 proceed 在继续执行下一个 when 语句时会计算 when 后面的条件。 所以, 只要有 proceed , 则 proceed 后面的那个条件就会被执行。

    原文作者:焉知非鱼
    原文地址: https://www.jianshu.com/p/182b88d0b59a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞