Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re: How can i compare strings using non-case-sensitive comparisions?

by Rudif (Hermit)
on Jan 16, 2001 at 04:06 UTC ( [id://52112]=note: print w/replies, xml ) Need Help??


in reply to How can i compare strings using non-case-sensitive comparisions?

Use case-insensitive match
if ($x =~ /^$y$/i) { #whatever }
In my benchmark the two methods take substantially the same time.
Rudif

#! perl -w use strict; use Benchmark; my $x='The Monastery Gates'; my $y='http://www.perlmonks.org/'; timethese(1000000,{eq=>sub{ if (lc $x eq lc $y) {} }, re=>sub{ if ($x +=~ /^$y$/i) {} }}) __END__ Benchmark: timing 1000000 iterations of a, b... eq: 1 wallclock secs ( 1.12 usr + 0.00 sys = 1.12 CPU) @ 8 +91265.60/s (n=1000000) re: 2 wallclock secs ( 1.06 usr + 0.00 sys = 1.06 CPU) @ 9 +79431.93/s (n=1000000)

Replies are listed 'Best First'.
Re: Answer: How can i compare strings using non-case-sensitive comparisions?
by chipmunk (Parson) on Jan 16, 2001 at 04:18 UTC
    How about a Benchmark where the strings do match?
    #!perl -w use strict; use Benchmark qw/ cmpthese /; my $x = 'The Monastery Gates'; my $y = 'ThE MoNaStErY GaTeS'; cmpthese(-(shift), { eq => sub{ if (lc $x eq lc $y) {} }, re => sub{ if ($x =~ /^$y$/i) {} }, } ) __END__ Benchmark: running eq, re, each for at least 3 CPU seconds... eq: 6 wallclock secs ( 3.04 usr + 0.01 sys = 3.05 CPU) @ 24 +2974.43/s (n=741072) re: 8 wallclock secs ( 3.00 usr + 0.00 sys = 3.00 CPU) @ 86 +303.00/s (n=258909) Rate re eq re 86303/s -- -64% eq 242974/s 182% --
    That's not all, though. When the strings don't match and $y is shorter, eq comes out about 220% ahead. When $y is longer and the regex optimizer can tell right off that $x is too short for /^$y$/ to match, eq still has a 40% advantage.
Re: Answer: How can i compare strings using non-case-sensitive comparisions?
by I0 (Priest) on Jan 16, 2001 at 21:52 UTC
    my $x='http://www*perlmonks*org/'; my $y='http://www.perlmonks.org/'; sub{ if ($x =~ /^$y$/i) {} }
    matches slowly and incorrectly

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://52112]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2024-04-19 06:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found