$_ と local($_)
役に立った:0件
sub a1{
$x = "abcd";
&a2(\$x);
}
sub a2{
($_) = @_;
$$_ =~ s/a/z/g;
}
sub b1{
$x = "abcd";
&b2(\$x);
}
sub b2{
local($_) = @_;
$$_ =~ s/a/c/g;
}
で、a1とb2についてベンチマークをとった結果、なぜかb1の方が微妙に速いことがわかりました。a関数郡とb関数郡のソース上の位置を逆転させても結果は同じです。回数は、10000000 回カウントした結果です。期待とは違った結果に驚いています。
localは「$_等の特殊記号に一時的な変更を与える」という意味だ過去によんだ「らくだ本」に書いてあった気がするので、この余分な作業でlocalをしたほうが時間がかかると思っていたのですが・・。
これは内部でどういったことが起こっているのでしょうか? もしくはベンチマークするサブルーチンの例がまずかったでしょうか?
回答(1件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
No.1ベストアンサー20pt
($_) = @_;
の左側は、一時的なリストを作るために余計に時間が掛かるのではないかと思います。
この回答へのお礼
ご指摘いただいた箇所を、 「$_ = $_[0]」と直した所、無事localを使わない方が速くなりました。これですっきりしました、ご回答ありがとうございます。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示











