この日記はGNSで生成しています。 |
local(@tm); local(@tm2); local($i); local($a); @tm = localtime(time); @tm2 = @tm; while ( $tm[0] == $tm2[0] ) { @tm2 = localtime(time); } $i = 0; @tm = @tm2; while ( $tm[0] == $tm2[0] ) { @tm2 = localtime(time); $a = &datefmt( *tm2, "%m/%d %H:%M:%S" ); $i++; } print "datefmt: $i $a\n"; $i = 0; @tm = @tm2; while ( $tm[0] == $tm2[0] ) { @tm2 = localtime(time); $a = &datefmt2( *tm2, "%m/%d %H:%M:%S" ); $i++; } print "datefmt2: $i $a\n"; sub datefmt { local(*a, $fmt) = @_; local %var; $var{'m'} = sprintf("%02d", $a[4] + 1); $var{'d'} = sprintf("%02d", $a[3]); $var{'H'} = sprintf("%02d", $a[2]); $var{'M'} = sprintf("%02d", $a[1]); $var{'S'} = sprintf("%02d", $a[0]); $var{'%'} = "%"; $fmt =~ s/\%([mdHMS%])/$var{$1}/g; $fmt; } sub datefmt2 { local(*a, $fmt) = @_; local($r); $r = sprintf("%02d", $a[4] + 1); $fmt =~ s/\%m/$r/g; $r = sprintf("%02d", $a[3]); $fmt =~ s/\%d/$r/g; $r = sprintf("%02d", $a[2]); $fmt =~ s/\%H/$r/g; $r = sprintf("%02d", $a[1]); $fmt =~ s/\%M/$r/g; $r = sprintf("%02d", $a[0]); $fmt =~ s/\%S/$r/g; $fmt; }
_ P2-450なNT4.0で5.003_07を動かして、datefmt=7078、datefmt2=9160(実行毎に±200くらい上下がある)と出ました。これは1秒あたりのループ実行回数となるので、速いほど大きい数値となります。置換回数を減らすことが必ずしも高速化につながらないという例・・・ということでいいでしょうか。
_ 数値に出ない差として、「datefmt2のほうが置換項目が増減したときの変更行数が少ない」というものがあります。debugが楽になるわけで、ある意味ベンチ結果以上に大切にしなければいけないことです。
_ どんな環境でどれくらいの値が出るか、見てみるのもおもしろそうですな・・・それっ。
_ ・・・って、よく読んだら「遅いんで静的パターンを生成する方法を研究中」という話じゃないか・・・早とちり^^;。
メールはこちらへ...[後藤浩昭 / Hiroaki GOTO / GORRY / gorry@hauN.org]