昨晚我終于看了電影火星人。這是一部有趣的電影,看起來很多科學是扎實的。電影制作人仍然喜歡做的一件事是讓計算機一次一個字地吐出信息,好像它們像電報一樣到達。如果你想讀取這樣的文件,我建議使用電影文件閱讀器。首先,我的長版本:
#!/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)不同的水平和效率。