in reply to Re: Check on if statement
in thread Check on if statement

Interesting ... "what's wrong with brute force?" Would two "eq" actually be more efficient then one "=~" ? It's probably splitting hairs, but it got me thinking .... Carl

Replies are listed 'Best First'.
Re: Re: Re: Check on if statement
by tommyw (Hermit) on Aug 17, 2002 at 21:47 UTC

    Well, my first thought was simply to write something that was simple, and not to worry about the speed. It depends on how many tens of million times this is going to happen before the speed even becomes an issue.

    However, since you asked:

    use Benchmark; $a="Hello"; timethese(10_000_000, { eq => sub { return ($a eq "" || $a eq "?") }, regexp => sub { $a=~/^\??$/ } } );
    gives
    Benchmark: timing 10000000 iterations of eq, regexp... eq: 7 wallclock secs ( 3.51 usr + -0.01 sys = 3.50 CPU) @ 28 +57142.86/s (n=10000000) regexp: 22 wallclock secs (10.15 usr + 0.13 sys = 10.28 CPU) @ 97 +2762.65/s (n=10000000)
    The figures don't change (significantly) when $a="?". When it's an empty string, the equality takes half the time (since the second equality is never used), and the regexp is slightly slower (because it has to backtrack). undef makes both slightly slower.

    --
    Tommy
    Too stupid to live.
    Too stubborn to die.

Re: Re: Re: Check on if statement
by blaze (Friar) on Aug 17, 2002 at 20:08 UTC
    In this case it would be more efficient because the AM who posted wants to check for either no value or a single question mark, if he/she wanted to check to see if the string was empty or a question mark anywhere in $foo then you would probably need something like
    if(!$foo || $foo =~ /\?/){ # either its blank or there is a ? somewhere in it }
      if(!$foo || $foo =~ /\?/){ # either its blank or there is a ? somewhere in it }
      actually, that would read: # it is blank, '0' or there is a '?' somewhere in it