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

I would use qr// to compile the regex before the loop so you don't have the (potentially) large overhead each iteration.

Update

I am wrong. Do not listen to me.



Who is Kayser Söze?
  • Comment on Re: Re: How to remove character at certain position in the String.....
  • Download Code

Replies are listed 'Best First'.
Re: How to remove character at certain position in the String.....
by Abigail-II (Bishop) on Dec 02, 2003 at 10:19 UTC
    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

      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