## NOTE: ## ## Reliable benchmarking is a difficult task. This particular benchmark ## was contructed the quickest way possible, without regard to issues like ## caching, scooping, compiler optimization, or representative data. Only a fool ## will consider that results might point to a 'rough' approximation. use Benchmark qw( :DEFAULT cmpthese ); END { unlink 'data' } $SIG{INT} = sub { unlink 'data' ; exit} ; my ($debug , $flex, $l, $n, $data, $fh, @tokens, $ret, @ret) = 0 ; { local $/ = undef; use Fatal qw( open close); open $fh, 'snip.txt'; $data = <$fh> ; close $fh; open $fh, '>data'; print $fh $data x 850 ; close $fh; no warnings; @tokens = ( qw[ EMAIL \b(?:\w+[.]?)+\w+\@(?:\w+[.])+[a-z]{2,3}\b ], qw( WORD [a-z]+ ), qw( NUM [0-9]+ ), qw( EOL \n ), qw( ERROR . ), ); } sub lex { $l->nextis( \$n ) ; return ('',undef) if $l->eoi; ($n->name, $n->text); }; sub Parse_Lex { use IO::File ; use Parse::Lex ; Parse::Lex->skip('[ \t]*') ; $l = new Parse::Lex @tokens or die; $l->from( new IO::File 'data' ) ; 1 while lex; } sub Parse_Flex { use Parse::Flex; yyin 'data' ; 1 while yylex; #print "@ret" while @ret = yylex ; } cmpthese ( 1 , { old => \&Parse_Lex, new => \&Parse_Flex} ) ; __DATA__