sub s_index{
my $pos = 0;
my $cnt = 0;
while (index($str, $sep, $pos)){
$pos++;
$cnt++;
}
$cnt{s_index}=$cnt;
}
####
my $_s_index = sub {
my $pos = 0;
my $cnt = 0;
local $[ = 1; # ook!
my $pos = -1;
++$cnt while $pos = index($dta,"\n\n",$pos+2);
$cnt{_s_index}=$cnt;
};
my $_while_re = sub{
my $cnt = 0;
my $recsep = "\n\n";
$cnt++ while $dta =~ /$recsep/g;
$cnt{_while_re} = $cnt;
};
=>resulted in:
Benchmark: timing 300 iterations of m_array, m_array_M, m_for, m_for_M, m_while, m_while_M, s_index, tr, while_re...
m_array: 11 wallclock secs ( 5.13 usr + 0.04 sys = 5.17 CPU) @ 58.03/s (n=300)
m_array_M: 4 wallclock secs ( 1.57 usr + 0.02 sys = 1.59 CPU) @ 188.68/s (n=300)
m_for: 9 wallclock secs ( 4.19 usr + 0.00 sys = 4.19 CPU) @ 71.60/s (n=300)
m_for_M: 3 wallclock secs ( 1.41 usr + 0.01 sys = 1.42 CPU) @ 211.27/s (n=300)
m_while: 5 wallclock secs ( 2.46 usr + 0.00 sys = 2.46 CPU) @ 121.95/s (n=300)
m_while_M: 2 wallclock secs ( 0.94 usr + 0.00 sys = 0.94 CPU) @ 319.15/s (n=300)
s_index: 2 wallclock secs ( 0.88 usr + 0.00 sys = 0.88 CPU) @ 340.91/s (n=300)
tr: 1 wallclock secs ( 0.36 usr + 0.00 sys = 0.36 CPU) @ 833.33/s (n=300)
(warning: too few iterations for a reliable count)
while_re: 2 wallclock secs ( 0.90 usr + 0.00 sys = 0.90 CPU) @ 333.33/s (n=300)
=== check counts ===
_while_re 2000
_m_for_M 2000
_m_array_M 2000
_tr 6000
_m_while_M 2000
_m_while 6000
_s_index 2000
_m_for 6000
_m_array 6000
####
Benchmark: timing 300 iterations of m_array, m_array_M, m_for, m_for_M, m_while, m_while_M, s_index, tr, while_re...
m_array: 12 wallclock secs ( 5.04 usr + 0.04 sys = 5.08 CPU) @ 59.06/s (n=300)
m_array_M: 11 wallclock secs ( 5.08 usr + 0.03 sys = 5.11 CPU) @ 58.71/s (n=300)
m_for: 9 wallclock secs ( 4.19 usr + 0.00 sys = 4.19 CPU) @ 71.60/s (n=300)
m_for_M: 8 wallclock secs ( 4.10 usr + 0.00 sys = 4.10 CPU) @ 73.17/s (n=300)
m_while: 5 wallclock secs ( 2.26 usr + 0.02 sys = 2.28 CPU) @ 131.58/s (n=300)
m_while_M: 5 wallclock secs ( 2.28 usr + 0.02 sys = 2.30 CPU) @ 130.43/s (n=300)
s_index: 5 wallclock secs ( 2.13 usr + 0.00 sys = 2.13 CPU) @ 140.85/s (n=300)
tr: 0 wallclock secs ( 0.27 usr + 0.00 sys = 0.27 CPU) @ 1111.11/s (n=300)
(warning: too few iterations for a reliable count)
while_re: 5 wallclock secs ( 2.11 usr + 0.00 sys = 2.11 CPU) @ 142.18/s (n=300)
=== check counts ===
_while_re 6000
_m_for_M 6000
_m_array_M 6000
_tr 6000
_m_while_M 6000
_m_while 6000
_s_index 6000
_m_for 6000
_m_array 6000