WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:[Perl] Benchmarkを使いたい(Win

Tak[MAIL][URL][WriteDate : Sat Oct 14 17:28:09 2000]

Perlの標準ライブラリモジュールにあるBenchmarkを使いたいんですが,
うまくいきません。

ラクダ本を見ながら,DOS窓で実行したものです :
C:\>perl -mBenchmark -mInteger
timethese(10000, { add => '$i +=2', inc => '$i++; $i++'});
__END__
Undefined subroutine &main::timethese called at - line 1.

あと,こんなのもやってみました :
C:\>perl
use Benchmark;
timethis(10000, '$i++');
__END__
times not implemented at C:\www\perl\lib/Benchmark.pm line 274.


他にもいろいろ(他のモジュールでも)試しましたが,返ってくるメッセージとしては,
Undefined subroutine &main::timethese called at - line 1.

times not implemented at C:\www\perl\lib/Benchmark.pm line 274.
の2種類でした。

Perlやスクリプト以前の話のような気もするので..
環境は Windows95, Perl version 5.003_07
PerlはC:\www にインストールされています。

最終的には,自作の検索CGIスクリプトについて調べたいんですが...

ちゃいぱ[MAIL][URL][WriteDate :Sat Oct 14 22:14:25 2000]

やぁー! Takさん、元気ですか!

メッセージを見る限り、timesがないって怒られているみたい..。
家だと環境がないんで、再現テストできません。
お急ぎなら、やはり、以下で質問して見て下さい。
http://x68000.startshop.co.jp/~68user/


Qz[MAIL][URL][WriteDate :Mon Oct 16 03:57:04 2000]

Windows版のPerlでは、Benchmarkが使用できないものがあります。
Takさんが使用しているPerlは、それっぽいです。

http://www.activestate.com/Products/ActivePerl/
こちらの最新版なら、利用できますので、入れ替えてはどうでしょう^^


ちゃいぱ[MAIL][URL][WriteDate :Mon Oct 16 10:15:44 2000]

Qzさん、いつもありがとうございます。

TakさんとPCのPerlでは、たまたま同じバージョンで、結果もほぼ同じでした。

WS(UNIX)のバージョンは 5.004_04で、
-mIntegerは駄目でしたが、
二番目のは、問題なく動きました。

>入れ替えてはどうでしょう^^ 
賛成!






Qz[MAIL][URL][WriteDate :Mon Oct 16 11:36:03 2000]

ActivePerl ver 5.005_3 だと、

C:\>perl -mBenchmark -mInteger 
timethese(10000, { add => '$i +=2', inc => '$i++; $i++'}); 
__END__ 
Undefined subroutine &main::timethese called at - line 1. 

これは、同じエラーでしたが

C:\>perl 
use Benchmark; 
timethis(10000, '$i++'); 
__END__ 

は、
timethis 10000:  0 wallclock secs (-0.00 usr +  0.00 sys = -0.00 CPU)
            (warning: too few iterations for a reliable count)
と表示されました。


Qz[MAIL][URL][WriteDate :Mon Oct 16 11:59:51 2000]

最新版いれて、以下のように実験してみたら・・・
C:\>perl
use Benchmark;
timethese(10000, { add => '$i +=2', inc => '$i++; $i++'}); 
__END__ 

以下のものが表示されました。
Benchmark: timing 10000 iterations of add, inc...
       add:  0 wallclock secs ( 0.00 usr +  0.00 sys =  0.00 CPU)
            (warning: too few iterations for a reliable count)
       inc:  0 wallclock secs ( 0.01 usr +  0.00 sys =  0.01 CPU) @ 1000000.00/s
 (n=10000)
            (warning: too few iterations for a reliable count)

-mオプションが対応してないのかな・・・
というか、このオプションつかったことありませんでしたが^^

Tak[MAIL][URL][WriteDate :Mon Oct 16 13:40:35 2000]

ちゃいぱさん,Qzさん,いろいろ試していただいて本当にありがとうございます。
やはりヴァージョンの問題だったんですね。

実は学校のPCに,わりと最近のActivePerl v5.6.0 (build 613) が入っていました。
Qzさんがおっしゃるように,-m オプションが対応してないみたいです。
C:\>perl -mBenchmark
で実行すると,前と同じ
Undefined subroutine &main::timethese called at - line 1. 
のメッセージが表示されます。

use Benchmark で呼び出せば OK でした。
もうちょっと現実的な例で... :

C:\>perl
$ul = qq{
<ul>
<li>Tak</li>
<li>Chaipa</li>
<li>Qz</li>
</ul>
};
use Benchmark;
timethese( 10000,
{
stime => 'while($ul =~ m|<li>(.*?)</li>|g){push(@name,$1)}'
,
ltime => 'while($ul =~ m|<li>([^<]*?)</li>|g){push(@name,$1)}'
}
);
__END__
Benchmark: timing 10000 iterations of stime, ttime...
ltime: 1 wallclock secs ( 0.88 usr + 0.00 sys = 0.88 CPU) @ 11363.64/s (n=10000)
stime: 0 wallclock secs ( 0.49 usr + 0.00 sys = 0.49 CPU) @ 20408.16/s (n=10000)

なぜか stime と ltime の順番が入れ替わりましたが,正常に動きました (ですよね?)。
この最新版インストラーをフロッピー(微妙に1枚に収まらない...)で持って帰ります。
ありがとうございました。

Tak[MAIL][URL][WriteDate :Sat Oct 21 01:39:35 2000]

[追記]
最新版 perl,v5.6.0 biult for MSWin32-x86-multi-thread
を入れてみました。
-m オプションの話なんですが...
大文字で
C:\>perl -MBenchmark
とすれば動作することがわかりました。(どっちでもいいことになってるのに....)

誰も興味ないかもしれないけど (^^; とりあえずご報告。

Tak[MAIL][URL][WriteDate :Sat Oct 21 01:41:47 2000]

完了忘れました。
回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]