最終更新時間から(perlに関して)
[上に]
[前に]
[次に]
spec-C
1999/11/16(火) 14:15:48
perlに関して教えて頂きたく願います。
あるファイルを参照し(xxx.dat)ファイルが更新されてから
1分以内なら表示、それ以外なら次の処理という動作を行いたいのですが
下記の方法よりスマートというか処理の早い方法がありますでしょうか
if( -M "./xxx.dat" > (0.0007*10) ){
print "一分以内です\n";
}
よろしくお願いします
ふじ
1999/11/16(火) 15:35:15
全然スマートじゃない別解なら、
if (time - (stat "./xxx.dat")[9] <= 60){
print "一分以内です\n";
}
どっちが速いかな(^^;
多分似たようなもんでしょうけど・・・
spec-C
1999/11/16(火) 15:38:44
ふじさん有り難うございます。
多分、ふじさんB-cusさんあたりがレスくれると思っていました。
その方法も早速使わせて頂きます。
また宜しくおねがいします。
他の方法もあったら参考にしたいと思いますので、解決チェックはもう少し
先にさせて下さい。
B-Cus
1999/11/17(水) 00:06:15
わかってるならいいんですが、-M の基準値はスクリプトの
実行開始時間なので、スクリプト中で何回 -M "./xxx.dat" を
調べても値は変化しません。
あと、これもわかってるならいいんですけど (自分でも いまいちだと思ったので
質問してるんでしょうから)、「1分以内」を調べるのに -M を使うのは
ちょっと変です。だって、-M は 日数単位でしょ。1day=60*60*24=86400sec で、
1min=60sec で、60/86400=0.00069444... だから 0.0007、ってこと
なんだろうけど (0.0007*10 って間違ってない? こっちの計算違いかしら)、
誤差出ますよね。やはり stat 使う方が一般的だし、他の人にとっても
読みやすいと思います。
速度については、-M は内部で stat して、$^T からその値を引いて、
さらに 日数単位に変換しなきゃならないんで、-M の方が遅いと思います。
# 計ってないですが。
B-Cus
1999/11/17(水) 00:18:51
補足。ふじさんは
> 全然スマートじゃない別解なら、
とおっしゃっておられますが、僕も同じように書きます。
ただ、[9] ってのがむかつくね〜。C なら
stat("./xxx.dat",&status);
if ( time(NULL)-status.st_mtime <= 60 ){
と書けるのに (でいいんだっけ?)。
可読性を良くする ([9]なんて書かなくてすむ) モジュールって ないのかな。
ふじ
1999/11/17(水) 00:51:39
>可読性を良くする ([9]なんて書かなくてすむ) モジュールって ないのかな。
こんなのありました。
Time::localtime
File::stat
#多分標準モジュールだと思う。
# 以下 perldocs Time::localtime より。
SYNOPSIS
use Time::localtime;
printf "Year is %d\n", localtime->year() + 1900;
$now = ctime();
use Time::localtime;
use File::stat;
$date_string = ctime(stat($file)->mtime);
ふじ
1999/11/17(水) 01:00:36
># 以下 perldocs Time::localtime より。
perldoc の間違いです(^^;
B-Cus
1999/11/17(水) 02:10:03
なるほど。
use File::stat;
if ( time - stat("./xxx.dat")->mtime <= 60 ){
ですね。ありがとうございます。
[上に]
[前に]
[次に]