in reply to Re: Re: How to remove character at certain position in the String.....
in thread How to remove character at certain position in the String.....

What potential overhead? Perl will *not* recompile the regex in each iteration (unless you modify $from or $len). Here's a proof, assuming the program is in the file /tmp/qq:
$ perl -Dr /tmp/qq 2>&1 | grep Compiling Compiling REx `^(.{2}).{2}(.*)$' $
It only gets compiled once.

Here's a benchmark:

#!/usr/bin/perl use strict; use warnings; use Benchmark 'cmpthese'; our @data = <DATA>; chomp @data; our $from = 2; our $len = 2; our (@a, @b, @c); cmpthese -10 => { substr => 'for (@a = @data) { substr $_, $from, $len, "" if length ($_) >= $fro +m + $len }', regex => 'for (@b = @data) { $_ = $1 . $2 if /^(.{$from}).{$len}(.*)$/; }', regex_qr => 'my $qr = qr /^(.{$from}).{$len}(.*)$/; for (@c = @data) { $_ = $1 . $2 if /$qr/; }', }; die "Unequal" unless "@a" eq "@b" && "@b" eq "@c"; __DATA__ 12345678 yellow a xx yyy a somewhat longer line to compensate for the smaller lines. bla bla bla bla Rate regex_qr regex substr regex_qr 38207/s -- -3% -62% regex 39497/s 3% -- -60% substr 99555/s 161% 152% --

Abigail

Replies are listed 'Best First'.
/$variable/ [was: Re: Re: How to remove character at certain position in the String.....]
by bronto (Priest) on Dec 02, 2003 at 10:47 UTC

    Interesting!

    Like jweed, I knew that if you use /$variable/ in a cycle, it gets recompiled at each iteration, even if $variable doesn't change.

    Since I am sure I read that in a far away day in the past ;-) I suppose that it worked that way before, so it must have changed at some point. Could anybody tell at which version of Perl that behaviour changed?

    Thanks

    Ciao!
    --bronto


    The very nature of Perl to be like natural language--inconsistant and full of dwim and special cases--makes it impossible to know it all without simply memorizing the documentation (which is not complete or totally correct anyway).
    --John M. Dlugosz