perlcompareequals

Compare two strings regardless of case size in perl


is there anyway to compare two strings regardless of case size? For Example

"steve" eq "STevE"   <----- these would match
"SHOE" eq "shoe"

You get the picture


Solution

  • yes - use uc() (upper-case function; see http://perldoc.perl.org/functions/uc.html )

    UPDATE: As per the excellent comment by Brian D Foy below, fc() is better than uc() since it implements official case folding.

    $ perl -e 'print uc("steve") eq uc("STevE"); print "\n";'
    1
    $ perl -e 'print uc("SHOE") eq uc("shoe"); print "\n";'          
    1
    $ perl5.8 -e 'print uc("SHOE") eq uc("shoe1"); print "\n";'
    
    $
    

    You can obviously use lc() as well.

    If you want the actual "eq" operator to be case insensitive, it might be possible using overloads but I don't think that's what you are asking for - please clarify your question if that's the case. Nor is it a great idea if you do want that, IMHO - too fragile and leads to major possible hard to trace and debug bugs.

    Also, it's an overkill in your specific case where you just want equality, but Perl regular expressions also have case-independent modifyer "i"