#!/usr/bin/perl no warnings; use strict; use Benchmark qw(cmpthese); $::string = "foofoo catbar"; $::re_foobOrNowt = qr/(foob|)foofoo/o; $::re_foob0or1 = qr/(foob)?foofoo/o; #study $::string; print 'After studying the searched string'.$/; cmpthese( 1000000, { foobOrNowt => 'if ($string =~ m/(foob|)foofoo/) { };', foob0or1 => 'if ($string =~ m/(foob)?foofoo/) { };', c_foobOrNowt=> 'if ($string =~ $::re_foobOrNowt) { };', c_foob0or1 => 'if ($string =~ $::re_foob0or1 ) { };', }); __DATA__ C:\test>201403 Benchmark: timing 1000000 iterations of c_foob0or1, c_foobOrNowt, foob0or1, foobOrNowt... c_foob0or1: 13 wallclock secs (13.38 usr + 0.00 sys = 13.38 CPU) @ 74744.00/s (n=1000000) c_foobOrNowt: 12 wallclock secs (11.85 usr + 0.00 sys = 11.85 CPU) @ 84409.56/s (n=1000000) foob0or1: 10 wallclock secs (10.63 usr + 0.00 sys = 10.63 CPU) @ 94117.65/s (n=1000000) foobOrNowt: 8 wallclock secs ( 8.60 usr + 0.00 sys = 8.60 CPU) @ 116238.52/s (n=1000000) Rate c_foob0or1 c_foobOrNowt foob0or1 foobOrNowt c_foob0or1 74744/s -- -11% -21% -36% c_foobOrNowt 84410/s 13% -- -10% -27% foob0or1 94118/s 26% 12% -- -19% foobOrNowt 116239/s 56% 38% 24% -- C:\test>201403 After studying the searched string Benchmark: timing 1000000 iterations of c_foob0or1, c_foobOrNowt, foob0or1, foobOrNowt... c_foob0or1: 12 wallclock secs (12.57 usr + 0.00 sys = 12.57 CPU) @ 79567.15/s (n=1000000) c_foobOrNowt: 12 wallclock secs (11.67 usr + 0.00 sys = 11.67 CPU) @ 85711.84/s (n=1000000) foob0or1: 11 wallclock secs (10.65 usr + 0.00 sys = 10.65 CPU) @ 93940.82/s (n=1000000) foobOrNowt: 10 wallclock secs ( 8.42 usr + 0.00 sys = 8.42 CPU) @ 118736.64/s (n=1000000) Rate c_foob0or1 c_foobOrNowt foob0or1 foobOrNowt c_foob0or1 79567/s -- -7% -15% -33% c_foobOrNowt 85712/s 8% -- -9% -28% foob0or1 93941/s 18% 10% -- -21% foobOrNowt 118737/s 49% 39% 26% -- C:\test>