use strict; use Benchmark qw(:all); cmpthese( 1_000_000, { zaxo => sub { vec(my $str, 2, 1) = 1; vec($str, 5, 1) = 1; vec($str, 8, 1) = 1; my $test = sub { my $foo = shift || $_; my $bar = $foo << 1; not ($foo & $str) ^ ($bar & $str); }; $test->(2); $test->(5); $test->(8); }, japhy => sub { my $str = "1010101011"; my $test = sub { my $l = 0; $str =~ ( "^" . join "", map "[01]" x ($_ - ($l+0,$l=$_)[0] - 2) . "(?:01|10)", @_ ); }; $test->(2); $test->(5); $test->(8); }, matija => sub { my %res=("00"=>0, "01"=>1,"10"=>1,"11"=>0); my $string = "1010101011"; my $test = sub { my $tmpres=1; foreach (@_) { $tmpres=$tmpres && $res{substr($string,$_-1,2)}; } return $tmpres; }; $test->(2); $test->(5); $test->(8); }, browseruk2 => sub { my $s = "1010101011"; my $test = sub { my $x = shift; substr $s, $x-1, 1 eq substr $s, $x, 1 and return for @_; return 1; }; $test->(2); $test->(5); $test->(8); }, ysth => sub { my $s = "1010101011"; my $test = sub { (" ".shift) =~ /^@{[map "(?=.{$_}(?:01|10))",@_]}/x }; $test->($s,2); $test->($s,5); $test->($s,8); } });