Compare two strings regardless of case size in per

2019-06-15 18:29发布

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

3条回答
老娘就宠你
2楼-- · 2019-06-15 19:20

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

$ 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"

查看更多
啃猪蹄的小仙女
3楼-- · 2019-06-15 19:26

A couple of ways to do this:

  • Use the lc or uc operator, which converts both strings to lower or upper case respectively:

    lc "steve" eq lc "STevE";

A simple regex will do just as well:

'steve' =~ /^STevE$/i;
查看更多
\"骚年 ilove
4楼-- · 2019-06-15 19:26

According to perldoc (http://perldoc.perl.org/functions/fc.html), it's better to use

fc("steve") eq fc("STevE")

Don't forget to add this line before first use of fc:

use feature 'fc';
查看更多
登录 后发表回答