このブログを検索

2013/02/06

一文字ずつパラパラと表示する

Perlクックブックより。
一文字ずつパラパラと表示する方法が紹介されていた。
まずは紹介されているものをそのまま書いて動くことを確認する。
split(//) で、一文字ずつに分解されることを知る。
ということは、分解した一文字ずつをprintし、sleepをはさんでいけばいいのではないかと思って、
while(<>){
   for(split(//)){
        print;
        sleep 1;
    }
}
とやってみたが、うまくいかない。
元のソースを見てみると、以下のような謎の1行があった。
$|=1;
そしてこれを書くと、想定どおりの動きをした。
$| とは何だろう?
調べてみたら、この値を0以外にすると出力のバッファリングをしないとのことであった。
通常はバッファリングするのでまとめて表示されるのだ。
1文字ずつパラパラと表示させるには、これを無効にする必要があったのだ。