Perl 6 - do given

台词阅读

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

#!/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)他们允许程序员表现不同的水平和效率。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 14,377评论 2 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,128评论 19 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,887评论 0 17
  • 又到这个点,老是熬夜,头发掉光了!再好的洗发水也没有用!哎! 坚持第二天咯!今天还画了幅油画!没画完,要等第一层颜...
    阿吨阅读 3,157评论 2 3
  • 写完这个题目我又有些后悔。既然是白日梦嘛,又何必有晴天? 好吧,既然是我自己的想法,不如将错就错。 写作从来未曾成...
    jefflawy阅读 3,975评论 0 0

友情链接更多精彩内容