> From: "Ph. Marek" <[EMAIL PROTECTED]> > Date: Wed, 12 Feb 2003 08:42:57 +0100 > > --Boundary-00=_BsfS+fOE40iabfr > Content-Type: text/plain; > charset="us-ascii" > Content-Transfer-Encoding: 7bit > Content-Disposition: inline > > Hello everybody, > > I've sometimes the task to analyse a string > starting from a given position, where this position > changes after each iteration. (like index() does) > > > As this is perl there are MTOWTDIIP but I'd like > to know the fastest. > > So I used Benchmark.pm to find that out. (script attached) > > > Excerpt from script: > "from_start" => sub { m/\S*\s+(\S+)/; }, > "re_dyn" => sub { m/^[\x00-\xff]{$pos}\S*\s+(\S+)/; }, > "re_once" => sub { m/^[\x00-\xff]{$pos}\S*\s+(\S+)/o; }, > "substr" => sub { substr($_,$pos) =~ m/\S*\s+(\S+)/; }, > "substr_set" => sub { $tmp=substr($_,$pos); $tmp =~ m/\S*\s+(\S+)/; }, > > from_start is for comparision only as it should be. > re_once is for comparision too as the index can't be adjusted. > (and dynamically recompiling via eval() for changing indexes can't > be fast enough)
Phil, please see the perlfunc entry for "pos" and the perlre section on \G. This is what you need. Luke