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” 暫停,因為電腦的移動方式比人眼更快。要想知道睡眠的時間,我會檢查字符的標點符號,以結束句子或引入暫停。我使用“<[]>”創(chuàng)建包含句點,感嘆號和問號的字符類,或包含逗號或分號的字符類。 “do given”讓我返回“given”語句的值,有效地將其轉(zhuǎn)換為“given”運算符

我總是在 IRC 的 #perl6 頻道上反彈我的想法,Zoffix 提出了這個更短的版本:

#!/usr/bin/env perl6

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

這里我們將文件逐個字符讀入默認的 “$ _” 主題變量,我們可以調(diào)用 “.print” 方法。然后,我們使用堆疊的三元運算符來休眠(也許在做夢),以找到多長時間。這個短得多,但對缺乏經(jīng)驗的人更加神秘。我喜歡這兩個版本,因為 1)他們都能工作 2)他們允許程序員表現(xiàn)不同的水平和效率。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,187評論 2 33
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,299評論 0 17
  • 又到這個點,老是熬夜,頭發(fā)掉光了!再好的洗發(fā)水也沒有用!哎! 堅持第二天咯!今天還畫了幅油畫!沒畫完,要等第一層顏...
    阿噸閱讀 475評論 2 3
  • 寫完這個題目我又有些后悔。既然是白日夢嘛,又何必有晴天? 好吧,既然是我自己的想法,不如將錯就錯。 寫作從來未曾成...
    jefflawy閱讀 743評論 0 0

友情鏈接更多精彩內(nèi)容