1秒未満のスリープ

while :
do
date
ls -l
# 0.5 秒 sleep する
perl -e 'select(undef, undef, undef, 0.5);'
done

参考


追記(2011/06/29):

use Time::HiRes; auryo

はてなブックマーク - 1秒未満のスリープ - ablog

と shang さんにブクマでコメントいただきました。
Time::HiRes は標準モジュールじゃないと思っていたのですが、標準添付されているんですね。知りませんでした。

以下はいくつかの環境で Time::HiRes のバージョンを調べてみた結果です。

bash-3.2$ uname -a
CYGWIN_NT-5.1 ********* 1.7.7(0.230/5/3) 2010-08-31 09:58 i686 Cygwin
bash-3.2$  perl -MTime::HiRes -le 'print $Time::HiRes::VERSION'
1.9719
-bash-3.00$ uname -a
SunOS ********* 5.10 Generic_142909-17 sun4u sparc SUNW,Sun-Blade-1000
-bash-3.00$ perl -MTime::HiRes -le 'print $Time::HiRes::VERSION'
1.59
$ uname -a
Linux ***** 2.6.18-164.el5 #1 SMP Thu Sep 3 02:16:47 EDT 2009 i686 i686 i386 GNU/Linux
$ perl -MTime::HiRes -le 'print $Time::HiRes::VERSION'
1.9717


Time::HiRes を使うと

while :
do 
date
ls -l
# 0.5 秒 sleep する
perl -MTime::HiRes -e 'Time::HiRes::sleep(0.5)'
done

こんな風に書けますね。

shang さんありがとうございました。

追記(2011/06/29):

perl -MTime::HiRes=sleep -e 'sleep(0.5)' で7文字短縮可能。でも普通にシェルスクリプトでsleep 0.5 が可能な気も。

はてなブックマーク - 1秒未満のスリープ - ablog

id:tzccinct さんにコメントいただきました。

use Time::HiRes 'sleep'

ってワンライナーでどう書くんだろうと思っていたのですが、

 -MTime::HiRes=sleep

と書けばよいんですね。

というか、

bash-3.2$ while :
do
date
ls -l
sleep 0.5
done

って書けるんですね。
勉強になりました。ありがとうございます!