$ perl -MTime::HiRes -MBenchmark=timethese -le'open F,";chomp for @words; $re= q(^bonjour); timethese(-1, { index => sub { for (@words) { return 1 if index($_,"bonjour") != -1 } }, re => sub { for (@words) { return 1 if /\bbonjour\b/ } }, q(re^) => sub { for (@words) { return 1 if /^bonjour/ } }, re_comp => sub { $re= qr/^bonjour/o; for (@words) { return 1 if /$re/o } }, grep => sub { return 1 if grep /bonjour/, @words } } )' Benchmark: running grep, index, re, re^, re_comp for at least 1 CPU seconds ... grep: 2 wallclock secs ( 1.08 usr + 0.00 sys = 1.08 CPU) @ 32.41/s (n=35) index: 1 wallclock secs ( 1.12 usr + 0.02 sys = 1.14 CPU) @ 267.54/s (n=305) re: 1 wallclock secs ( 1.10 usr + 0.02 sys = 1.12 CPU) @ 272.32/s (n=305) re^: 1 wallclock secs ( 1.14 usr + 0.00 sys = 1.14 CPU) @ 327.19/s (n=373) re_comp: 1 wallclock secs ( 1.04 usr + 0.00 sys = 1.04 CPU) @ 268.27/s (n=279)