това е най-бавния вариант:
#!/usr/bin/perl
use strict;
use Benchmark qw(:all);
$main::string = 'aaaaaaaaaa';
$main::buffer = 'a';
$main::same = 1;
@main::array_full = split '', $main::string;
@main::array_part = qw(a b a a a a a a a a);
my $result = timethese(10_000_000, {
'equal_full' => '$main::buffer eq $_ or last for @main::array_full;',
'equal_part' => '$main::buffer eq $_ or last for @main::array_part;',
'regex' => '$main::string =~ /^\Q$main::buffer\E+$/o',
'substr' => 'for (0..length($main::string)) {
if (substr($main::string,$_,1) ne $main::buffer) {
$main::same=0;
last;
}
}',
});
cmpthese( $result );
__END__
stdout:
Benchmark: timing 10000000 iterations of equal_full, equal_part, regex, substr...
equal_full: 38 wallclock secs (30.03 usr + 0.04 sys = 30.07 CPU) @ 332557.37/s (n=10000000)
equal_part: 13 wallclock secs ( 8.79 usr + 0.00 sys = 8.79 CPU) @ 1137656.43/s (n=10000000)
regex: 9 wallclock secs ( 7.81 usr + 0.01 sys = 7.82 CPU) @ 1278772.38/s (n=10000000)
substr: 72 wallclock secs (51.92 usr + 0.05 sys = 51.97 CPU) @ 192418.70/s (n=10000000)
Rate substr equal_full equal_part regex
substr 192419/s -- -42% -83% -85%
equal_full 332557/s 73% -- -71% -74%
equal_part 1137656/s 491% 242% -- -11%
regex 1278772/s 565% 285% 12% --