in reply to Re^4: Remove all non alphanumeric characters excluding space, underscore and minus sign (Benchmark--)
in thread Remove all non alphanumeric characters excluding space, underscore and minus sign

Thanks. I was short on time and posted with code I wouldn't use myself because it seemed to demonstrate the problem with the prior code. When I use Benchmark myself, I arrange for a way to test the code being benchmarked for exactly these types of reasons.

I was fooled by seeing a 200% difference but I still should've rejected the code when the run time per operation was that low.

Sorry for posting "in a hurry". Thanks for the correction. :)

- tye        

  • Comment on Re^5: Remove all non alphanumeric characters excluding space, underscore and minus sign (Benchmark--)

Replies are listed 'Best First'.
Re^6: Remove all non alphanumeric characters excluding space, underscore and minus sign (Benchmark--)
by Tux (Canon) on Feb 13, 2012 at 22:22 UTC

    I so much stand corrected! When I wrote it, I meant

    my $string = pack "C*" => map { 32 + int rand 95 } 0..1280; cmpthese (-1, { subsingle => sub { (my $s = $string) =~ s/[^a-zA-Z0-9 _-]//g }, subplus => sub { (my $s = $string) =~ s/[^a-zA-Z0-9 _-]+//g }, tran => sub { (my $s = $string) =~ tr/a-zA-Z0-9 _-//cd }, });

    Which gives completely different results indeed:

    $ perl5.8.8 test.pl Rate subsingle subplus tran subsingle 9514/s -- -2% -90% subplus 9660/s 2% -- -90% tran 92839/s 876% 861% -- $ perl5.10.1 test.pl Rate subsingle subplus tran subsingle 7802/s -- -9% -92% subplus 8574/s 10% -- -91% tran 99211/s 1172% 1057% -- $ perl5.12.3 test.pl Rate subsingle subplus tran subsingle 5191/s -- -17% -95% subplus 6279/s 21% -- -94% tran 99211/s 1811% 1480% -- $ perl5.14.1 test.pl Rate subsingle subplus tran subsingle 6081/s -- -18% -94% subplus 7450/s 23% -- -92% tran 97303/s 1500% 1206% -- $ bleadperl test.pl Rate subsingle subplus tran subsingle 6221/s -- -12% -94% subplus 7096/s 14% -- -93% tran 97303/s 1464% 1271% -- $

    So the plus indeed speeds up the substitute and tr, even in /c mode, is fastest


    Enjoy, Have FUN! H.Merijn