gpt4 book ai didi

Perl 字符串比较

转载 作者:行者123 更新时间:2023-12-01 00:32:51 25 4
gpt4 key购买 nike

我在 Perl 中进行链比较时遇到一个基本问题。

use strict;
use warnings;

my $toto ="a";

if ("a" cmp $toto)
{
print "success";
}
else
{
print "fail\n";
}

my $titi=<STDIN>;

它总是说失败

如果我使用 eq 而不是 cmp,它就可以工作。

但如果我这样做:

my $toto = <STDIN>;

if ("a" eq $toto)
{
print "success";
}
else
{
print "fail\n";
}

my $titi=<STDIN>;

我使用 a 作为输入,这会打印 fail

出了什么问题?

最佳答案

什么是cmp运算符?

$a cmp $b 产生 $a$b 之间的字典关系,这意味着它返回三个值:

  • -1 表示 $a 小于 $b
  • 0 表示 $a 等于 $b
  • 1 表示 $a 大于 $b
$a = "a";
$b = "a";

print ($a cmp $b);

输出0,表示它们相等



STDIN读取

my $toto = <STDIN>;

当您使用类似的方法从 STDIN 读取一行(即在标量上下文中读取)时,它将读取整行,包括换行符。

这意味着 $toto"a\n" 而不仅仅是 "a",这就是为什么您后面使用 eq 失败。

您可以使用 chomp 解决此问题,这将从 $toto 中删除换行符,如下所示

snippet.pl

my    $toto = <STDIN>;
chomp $toto;

if ( $toto eq "a" ) {
print "Yes!\n";
}

运行示例如下所示

$ perl snippet.pl
a<return>
Yes!

关于Perl 字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32932553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com