http://www.perlmonks.org?node_id=1025616


in reply to Curious find while comparing grep, map, and smart match...

redo if ( @gArray && grep { /$rInt/ } @gArray ); ... redo if ( @mArray && map { /$rInt/ } @mArray ); ... redo if ( @sArray && $rInt ~~ @sArray );

The three are not equivalent.    grep and map use regular expressions and have code blocks while the other does not.    Try it like this:

redo if @gArray && grep /$rInt/, @gArray; ... redo if @mArray && map /$rInt/, @mArray; ... redo if @sArray && /$rInt/ ~~ @sArray;

Replies are listed 'Best First'.
Re^2: Curious find while comparing grep, map, and smart match...
by dbuckhal (Chaplain) on Mar 27, 2013 at 03:17 UTC

    Wow, that, and using word boundaries from tye's hint, made a significant difference!

    before:

    Benchmark: timing 2500 iterations of grepGen, mapGen, smartGen... grepGen: 23 wallclock secs (22.51 usr + 0.00 sys = 22.51 CPU) @ 11 +1.06/s (n=2500) mapGen: 11 wallclock secs (11.42 usr + 0.00 sys = 11.42 CPU) @ 21 +8.93/s (n=2500) smartGen: 1 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ 23 +92.34/s (n=2500)

    after:

    Benchmark: timing 2500 iterations of grepGen, mapGen, smartGen... grepGen: 14 wallclock secs (13.70 usr + 0.00 sys = 13.70 CPU) @ 18 +2.52/s (n=2500) mapGen: 13 wallclock secs (13.57 usr + 0.00 sys = 13.57 CPU) @ 18 +4.20/s (n=2500) smartGen: 2 wallclock secs ( 1.19 usr + 0.00 sys = 1.19 CPU) @ 21 +07.93/s (n=2500)

    That really narrowed the gap between grep and map.