Perl中的字符串比较与"eq"vs"=="

har*_*ari 80 string perl

我是(一个完整的Perl新手)在if声明中进行字符串比较:

如果我这样做:

if ($str1 == "taste" && $str2 == "waste") { }
Run Code Online (Sandbox Code Playgroud)

我看到了正确的结果(即如果条件匹配,则评估"then"块).但我看到这些警告:

参数"taste"在行号x的数字eq(==)中不是数字.
参数"waste"在行号x的数字eq(==)中不是数字.

但如果我这样做:

if ($str1 eq "taste" && $str2 eq "waste") { }
Run Code Online (Sandbox Code Playgroud)

即使满足if条件,它也不会评估"then"块.

在这里,$str1taste$str2waste.

我该怎么解决这个问题?

PSI*_*Alt 106

首先,eq用于比较字符串; ==用于比较数字.

即使满足"if"条件,它也不会评估"then"块.

我认为你的问题是你的变量不包含你认为他们做的事情.我认为你$str1或者$str2包含类似"味道"的东西.在if:之前打印检查它们print "str1='$str1'\n";.

可以使用该chomp($str1);功能删除尾随换行符.

  • 该死的,我也有回车.这就是我需要的:$ str1 = ~s /\r | \n // g; 多么新秀的错误. (2认同)

cdh*_*wie 28

==做一个数字比较:它将两个参数转换为数字,然后比较它们.只要$str1并且$str2两者都作为数字评估为0,则满足条件.

eq 进行字符串比较:两个参数必须符合词条(区分大小写)才能满足条件.

"foo" == "bar";   # True, both strings evaluate to 0.
"foo" eq "bar";   # False, the strings are not equivalent.
"Foo" eq "foo";   # False, the F characters are different cases.
"foo" eq "foo";   # True, both strings match exactly.
Run Code Online (Sandbox Code Playgroud)

  • "2foo"=="3bar"; #False,字符串分别计算为2和3 (8认同)
  • @让佛朗哥.一个更有趣的例子是`"2foo"=="2bar"`,这是真的.产生false的示例并不令人惊讶,并没有真正说明运算符之间的区别,因为这些字符串不会与*any*运算符相等. (8认同)
  • 这个例子背后的想法是用"foo"=="bar"绘制并行,这是真的,而"2foo"=="3bar"不是 (7认同)

小智 5

你有没有试着扼杀$str1$str2

我发现了使用(另一个)$str1eq'Y' 的类似问题,它只在我第一次出现时才消失:

chomp($str1);
if ($str1 eq 'Y') {
....
}
Run Code Online (Sandbox Code Playgroud)

之后工作.

希望有所帮助.