例えば
Windows-XP-prompt>perl -MBenchmark -e "{my $m=1;timethis(10,'&f($m,2)');}sub f{print join ' ',@_[0,1],'';}"
において、Benchmark::timethisなどに渡すコードはプライベート変数を覗くことができないようなので、ベンチマーク中に出力ファイルハンドルへ吐きだされる文字列が 2 2 2 ... となるのは理解できます。
プライベート変数の内容を使うコードをテストしたい場合は、
Windows-XP-prompt>perl -MBenchmark -e "{my $m=1;our @o=($m,2);timethis(10,'&f(@o)');}sub f{print join ' ',@_[0,1],'';}"
のように、timethisを呼び出す直前にour宣言などしたグローバル変数を介してコードに内容を渡すのが、一番考えられる方法でしょうか。
しかしこれは正直、手際が悪いと感じるので、もっと手際のいい方法を欲しています。
timethis() はコードリファレンスを渡せますよ。
perl -MBenchmark -e "my \$m=1;timethis(10, sub {print join ' ',\$m,2,'';})"
1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 timethis 10: 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | きなもち | 14回 | 2回 | 0回 | 2010-05-08 16:03:48 |
syntax error at -e line 1, near "my \"
Execution of -e aborted due to compilation errors.
と怒られてしまったのですが。