=encoding euc-jp =pod =head1 名前 Time::Elapse - タスクの実行中、時間を監視するのに便利なPerl拡張 =head1 説明 Time::Elapseは1つのメソッド: lapse を持った非常にシンプルなクラスです 基本的にlapseメソッドは変数の'頭のなかを空っぽにさせ'、 内部的にそれが溜め込んでいるかもしれない値をすべて放棄させます。 (宇宙人が映画の中ででやっているようなことによく似ています)、 そして同時に現在の時刻をその中に格納させます。それから変数の値に アクセスするときにはいつでも、内部の'宇宙人'は、あなたが変数を 初期化したときとそれを出力したときとの時刻の差をフォーマットし、 それを返します。(変数が保持している値があればそれもつけて)。 :-) あなたがそれを出力する度に、更新された差を、変数そのものの内部に 隠されたメソッドによって得ることになります。出力は HH:MM:SS.000000[マイクロ秒単位]にフォーマットされます。 率直に言ってtime()以上のことはしていません。しかしもう一度、最も単純なことは そうそうあることじゃありません。 :-) これが本当にやっていることは、他のだれもが手で設定していたことがある計算を 賢い方法で隠し、そして1行の出力でも、他の文字列に埋め込んでもうまくいく ように合理的にフォーマットされた出力を生成していることなのです。 =head1 概要 =head2 使用方法 Elapseの利用方法は単純そのものです: use Time::Elapse; # プログラムのどこかで... Time::Elapse->lapse(my $now); # あるいはこのようにすることもできます: # Time::Elapse->lapse(my $now = "processing"); #...プログラムの残りを実行 print "Time Wasted: $now\n"; 途中で説明を更新し、タイム・カウンタをリセットするためには、 プログラムの途中のどこかで単純に $now = "parsing"; と変数に代入してください。新しい値が格納され、元の時刻は現在の 時刻に置き換えられます。 =head2 出力のサンプル 上記のコードを使うと、出力は以下のようになります: Time Wasted: 00:00:05.565763 あるいは Time Wasted: 00:00:03.016700 [processing] (さらに出力) Time Wasted: 00:00:02.003764 [parsing] =head2 使用例のコードの追加 ファイルのNet::FTPダウンロードの繰り返しの間でも、各ファイルの ダウンロードの所要時間を表示するために、これを使うことができます。 foreach my $file (@files_to_download) { # $fileからローカル・ファイル名を取り出し # ... Time::Elapse->lapse(my $now = "Downloading $localfile."); $ftp->get($file, $localfile) or carp("### Could not download $file! $!") and next; print "Done. Elapsed : $now\n"; # ... } これは複数のソースから多くのデータを処理するときにも、便利なテクニックでしょう。 =head1 いわゆる'バグ' Elapseは1秒未満の粒度の時刻を提供します。しかしその処理そのもの効用に よって正確さはちょっとした妨害を受けるために、時刻の値はほぼ正確な値に しまいます。 それはほぼ0.00001 から 0.0009 秒の間ぐらいです (これはシステムとその時点で実行されているプロセスの数によります :-) #!/usr/bin/perl use Time::Elapse; Time::Elapse->lapse(my $now = "testing 0"); for (1 .. 5) { print "$now\n"; $now = "testing $_"; } print "$now\n"; (PowerMac G3/400 で MacPerl 5.004 を実行した結果 on MacOS 8.6) 00:00:00.000937 [testing 0] 00:00:00.000743 [testing 1] 00:00:00.000344 [testing 2] 00:00:00.000327 [testing 3] 00:00:00.000358 [testing 4] 00:00:00.000361 [testing 5] (AMD Duron 1.1Ghz で Perl 5.8.0 を実行した結果 on RedHat Linux 8.0) 00:00:00.000079 [testing 0] 00:00:00.000035 [testing 1] 00:00:00.000018 [testing 2] 00:00:00.000016 [testing 3] 00:00:00.000016 [testing 4] 00:00:00.000020 [testing 5] =head1 エクスポート デフォルトではありません。 =head1 作者 =head2 作者 Scott R. Godin, Cmactech@webdragon.netE> =head2 最終更新日時 Fri Aug 8 01:12:56 EDT 2003 =head1 著作権(COPYRIGHT) Copyright (c) 2001 Scott R. Godin. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 参考資料 L. =head1 翻訳者 川合 孝典(GCD00051@nifty.ne.jp)