#!/usr/bin/perl use strict; use warnings; # vim=:SetNumberAndWidth ################################################################################ use Benchmark qw(:all); our @words; my $count=@ARGV?$ARGV[0]:50000; my $str=q( ); sub getss1() { local $_ = $str; my $start = 1+index $_, q("); my $end = index $_, q("), $start; $_ = substr $_, $start, $end; } use String::Index qw(cindex ncindex); sub getss2() { local $_ = $str; my $start = 1+cindex $_, q("); my $end = cindex $_, q("), $start; $_ = substr $_, $start, $end; } sub getss3() { @words = split q( ),$str; local $_ = $words[1]; $_ = $words[1]; my $start = 1+index $_, q("); my $end = index $_, q("), $start; $_ = substr $_, $start, $end; } sub getsub1() { local $_ = $str; s/^[^"]*"([^"]+)".*$/$1/; $_; } sub getsub2() { local $_ = $str; m{^[^"]*"([^"]+)".*$}; $1; } cmpthese($count, { 'ss1' => 'getss1', 'ss2' => 'getss2', 'ss3' => 'getss3', 'sub1' => 'getsub1', 'sub2' => 'getsub2', }); # vim: ts=2 sw=2 ai number #### > /tmp/bench Rate sub1 sub2 ss2 ss3 ss1 sub1 384615/s -- -38% -38% -54% -69% sub2 625000/s 62% -- -0% -25% -50% ss2 625000/s 62% 0% -- -25% -50% ss3 833333/s 117% 33% 33% -- -33% ss1 1250000/s 225% 100% 100% 50% --