【问题标题】:Perl String Compare Not Working [duplicate]Perl字符串比较不起作用[重复]
【发布时间】:2014-03-28 02:28:47
【问题描述】:

下面是我的 Perl 程序:

my $var1='perfp2u1@vanlync2k13.com';
my $var2='PerfP2U1@vanlync2k13.com';
if($var1 eq $var2){
    print "match";
}
else{
    print "no match";
}

输出是: no match

我不知道为什么程序不能正常工作?????? 对于上述程序,我希望输出“匹配”。

以下是我的 straberry perl 版本详情(操作系统:windows 7)。

D:>perl -version
This is perl 5, version 16, subversion 2 (v5.16.2) built for MSWin32-x64-multi-t
hread

Copyright 1987-2012, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

【问题讨论】:

  • 当字符串明显不相等时,为什么会期望“匹配”?
  • eq 区分大小写,因此您的字符串不匹配,因为$var2 大写为Ps。
  • 这对我来说似乎是不言而喻的。您的输出是 no match,因为字符串不匹配。您的程序运行正常。

标签: perl


【解决方案1】:

如果您想要不区分大小写的匹配,只需使用lc

my $var1 = 'perfp2u1@vanlync2k13.com';
my $var2 = 'PerfP2U1@vanlync2k13.com';

if(lc $var1 eq lc $var2){
    print "match";
} else{
    print "no match";
}

【讨论】:

  • 对于不区分大小写的比较,您实际上想使用fc($var1) eq fc($var2),但它仅在 5.16 开始作为内置函数提供。 lc($var1) eq lc($var2) 几乎总是有效,所以它适用于其他地方。
  • 感谢fc的介绍。我最近考虑申请的一家公司做了很多 unicode 工作,但我还没有真正解决这个问题。从那里工作的人那里,我只知道这是一个令人头疼的问题。
  • 天啊,我怎么会错过案件不匹配!我花了半天试图找出问题所在!!!!我的天啊,我最后在公开论坛上问了一个愚蠢的问题!!!嗯...(真的对自己感到沮丧)...,但非常感谢您指出这一点,否则我会花更多时间试图找出问题所在:)。
【解决方案2】:

Perl eq 运算符区分大小写,我很惊讶您认为它的行为会有所不同。

要进行 不区分大小写 比较,您可以在进行比较。

像这样

my $var1 = 'perfp2u1@vanlync2k13.com';
my $var2 = 'PerfP2U1@vanlync2k13.com';

if (lc $var1 eq lc $var2){
    print 'match';
}
else {
    print 'no match';
}

输出

match

【讨论】:

  • 对于不区分大小写的比较,您实际上想使用fc($var1) eq fc($var2),但它仅在 5.16 开始作为内置函数提供。 lc($var1) eq lc($var2) 几乎总是有效,所以它适用于其他地方。
  • @ikegami:这仅对非 ASCII 应用程序是必需的。它还需要use feature 'fc'use 5.016 才能启用它。
  • 天啊,我怎么会错过案件不匹配!我花了半天试图找出问题所在!!!!天哪,我最后在公开论坛上问了一个愚蠢的问题!!!嗯......(我真的很沮丧)......,但非常感谢你指出这一点,否则我会花更多时间试图找出问题所在:)。
  • @SaurabhChakrabarty:别担心——我们都会这样做!
  • 我不知道当时我在发布问题时是如何错过了两个字符串的情况,但后来我自己找到了。但无论如何,谢谢你的回答:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 2021-09-02
  • 2014-05-24
  • 1970-01-01
  • 2014-04-03
  • 2012-01-22
相关资源
最近更新 更多