in reply to Re: Re: Re: Simple Switch statement
in thread Simple Switch statement

Ah, but why not:

for($switch_me) { /bob/ && do { print "Got 'bob'!\n"; break }; /frnak/ && do { print "Got 'frnak'!\n"; break }; $_ == 1 && do { print "Got 1!\n"; break }; print "Got nuttin'!\n"; }

You can have your cake AND eat it too.

Alakaboo

Replies are listed 'Best First'.
Re: Re (4): Simple Switch statement
by Roger (Parson) on Sep 14, 2003 at 02:42 UTC
    I have constructed the following test case to compare the performance of simple regular expression and simple eq test:

    use Benchmark; @switch_me = qw / bob frnak 1 roger james /; timethese (1000000, { 'test_regex' => ' &test_regex; ', 'test_eq' => ' &test_eq; ' }); sub test_regex() { for(@switch_me) { /bob/ && do { break }; /frnak/ && do { break }; $_ == 1 && do { break }; } } sub test_eq() { for(@switch_me) { $_ eq "bob" && do { break }; $_ eq "frnak" && do { break }; $_ == 1 && do { break }; } }
    The two subroutines are identical except for the string testing bit. The following are the test results:
    Benchmark: timing 1000000 iterations of test_eq, test_regex... test_eq: 8 wallclock secs ( 8.45 usr + 0.01 sys = 8.46 CPU) @ 118161.41/s (n=1000000) test_regex: 10 wallclock secs ( 9.22 usr + 0.01 sys = 9.23 CPU) @ 108307.16/s (n=1000000)
    It's about (118161.41-108307.16)/108307.16 = 10% speed increase in using eq than using regular expression. It's not a great increase, but it's nevertheless faster to use eq than regular expression.