Perl 6 - do given

作者: 焉知非鱼 | 来源:发表于2016-11-19 09:44 被阅读17次

    台词阅读

    昨晚我终于看了电影火星人。这是一部有趣的电影,看起来很多科学是扎实的。电影制作人仍然喜欢做的一件事是让计算机一次一个字地吐出信息,好像它们像电报一样到达。如果你想读取这样的文件,我建议使用电影文件阅读器。首先,我的长版本:

    #!/usr/bin/env perl6
    
    sub MAIN (Str $file) {
        for $file.IO.lines(:chomp(False)) -> $line {
            for $line.comb -> $letter {
                print $letter;
                my $pause = do given $letter {
                    when /<[.!?]>/ { .50 }
                    when /<[,;]>/  { .20 }
                    default        { .05 }
                }
                sleep $pause;
            }
        }
    }
    

    所以我在逐行读取给定的 $file 文件,告诉 Perl 不要 “chomp” 每一行(删除换行,这,BTW,你可以使用“nl-in”设置)。我“print”那些字母,而不是“put”,因为我不想换行。然后我需要使用 “sleep” 暂停,因为电脑的移动方式比人眼更快。要想知道睡眠的时间,我会检查字符的标点符号,以结束句子或引入暂停。我使用“<[]>”创建包含句点,感叹号和问号的字符类,或包含逗号或分号的字符类。 “do given”让我返回“given”语句的值,有效地将其转换为“given”运算符

    我总是在 IRC 的 #perl6 频道上反弹我的想法,Zoffix 提出了这个更短的版本:

    #!/usr/bin/env perl6
    
    sub MAIN (Str $file) {
        for $file.IO.comb {
            .print;
            sleep  /<[.!?]>/ ?? .30
                !! /<[,;]>/  ?? .10
                !!              .05;
        }
    }
    

    这里我们将文件逐个字符读入默认的 “$ _” 主题变量,我们可以调用 “.print” 方法。然后,我们使用堆叠的三元运算符来休眠(也许在做梦),以找到多长时间。这个短得多,但对缺乏经验的人更加神秘。我喜欢这两个版本,因为 1)他们都能工作 2)他们允许程序员表现不同的水平和效率。

    相关文章

      网友评论

        本文标题:Perl 6 - do given

        本文链接:https://www.haomeiwen.com/subject/fwnspttx.html