$_[0]->YYData と $_[0]->{USER}
$_[0]->YYData 経由だと遅くなるらしい
$_[0]->YYData を使った場合のコード
%% input: #empty | input line ; line: '\n' { $_[1] } | exp '\n' { print "$_[1]\n" } | error '\n' { $_[0]->YYErrok } ; exp: NUM ; %% sub benchmark { my($self)=shift; for (my $i = 0; $i < 100000; $i++) { $self->YYData->{$i} = 1; } } sub Run { my($self)=shift; $self->benchmark(); #$self->YYParse( yylex => \&_Lexer, yyerror => \&_Error ); } my($t)=new Test; $t->Run;
$_[0]->{USER} を使った場合のコード
%% input: #empty | input line ; line: '\n' { $_[1] } | exp '\n' { print "$_[1]\n" } | error '\n' { $_[0]->YYErrok } ; exp: NUM ; %% sub benchmark { my($self)=shift; for (my $i = 0; $i < 100000; $i++) { #$self->YYData->{$i} = 1; $self->{$i} = 1; } } sub Run { my($self)=shift; $self->benchmark(); #$self->YYParse( yylex => \&_Lexer, yyerror => \&_Error ); } my($t)=new Test; $t->Run;
$_[0]->YYData を使った場合の実行結果
real 0m4.918s user 0m4.690s sys 0m0.080s
$_[0]->{USER} を使った場合の実行結果
real 0m1.843s user 0m1.760s sys 0m0.070s