Which gave somewhat more expected results:use Benchmark; $string = "hello world I am a string of some sort of length" +; timethese(-1, { "match" => sub { ($char) = $string =~ /^.{4}(.)/;}, "unpack" => sub { ($char) = unpack("x4 A1", $string);}, "substr" => sub { ($char) = substr($string,4,1);}, "silly" => sub { my $string2 = $string; $char = chop $s +tring2 while length $string2 >= 4;}, #note the local });
Nevertheless, I'm suprised at the speed of silly. Can anybody explain why eating that string is faster than unpack, even if the string has some length?Benchmark: running match, silly, substr, unpack, each for at least 1 C +PU seconds... match: 3 wallclock secs ( 1.00 usr + 0.02 sys = 1.02 CPU) @ 18 +0382.35/s (n=183990) silly: 4 wallclock secs ( 1.15 usr + 0.09 sys = 1.24 CPU) @ 17 +341.13/s (n=21503) substr: 2 wallclock secs ( 1.00 usr + 0.05 sys = 1.05 CPU) @ 94 +4029.52/s (n=991231) unpack: 2 wallclock secs ( 1.02 usr + 0.06 sys = 1.08 CPU) @ 36 +2192.59/s (n=391168)
Cheers,
jeroen In reply to Re:{3} Concatenation ... Strings
by jeroenes
"We are not alone"(FZ)
Update: Ouch! Fixed... silly is the slowest,
and the universe is back to normal :-)
The last benchmarks were recorded when my CPU hit
a load of 4.63, so they may be a little distorted ;-)
in thread Changing a character in the middle of a word (was: Concatenation ... Strings)
by Zerhash
For:
Use:
& & < < > > [ [ ] ]