2015-02-06 111 views
0

当我尝试匹配2个相同的变量时,它会一直工作,直到在我的perl中有一个方括号。 VAR1 = u6701,VAR2 = u6701匹配并给出等于 但是,VAR1 = aw [101],VAR2 = aw [101]给了我UNEQUAL。在Perl中匹配内部方括号

我使用$ VAR1 == $ VAR2来检查并且这两个变量都是字符串。请帮忙。

谢谢。

+0

这看起来不像Perl。我怀疑你没有向我们展示真实的代码。 – Schwern 2015-02-06 06:10:45

+0

虽然只是为了混淆这个问题,但标量实际上是幕后的双重价值:http://stackoverflow.com/questions/28186617/concerns-with-concatenating-strings-and-ints/28187890#28187890 – Sobrique 2015-02-06 15:42:56

+0

@Sobrique Total离题,但我不能帮助自己。标量可以是一个三元值,[PVNV可以包含一个标量的字符串,整数和双精度表示](https://gist.github.com/schwern/d4dcf7523151acd9e0b8)。你可以在[illguts - Illustrated Perl Guts]中看到它(https://github.com/rurban/illguts/blob/master/illguts.pdf?raw=true)。 – Schwern 2015-02-06 18:48:05

回答

2

在Perl中,以检查两个字符串值,我建议你使用eq

为如

if($VAR1 eq $VAR2) 
     return true; 
else 
     return false; 

==对数字测试平等。 eq对字符串也一样。

也可以使用cmp操作者,这是< =>操作人员的非数值当量:

$result = $string1 cmp $string2; 

$结果将是:

`0` if the strings are equal 
`1` if string1 is greater than string2 
`-1` if string1 is less than string2 
3

==是数字平等运算符在Perl中,它会检查两件事是否等于,编号为eq是字符串相等运算符,这就是你想要使用的。 “1”和“01.00”等于数字,但不是字符串。 Here's the docs on all the equality operators。还有不错的在线书籍Beginning Perl

==为什么有时会起作用是因为Perl对于将字符串解释为数字而言非常自由,至于绝望的地步。通常它会将字符串视为0,但有时它会在字符串中找到一个数字并使用它。例如,“101aw”将被解释为101,但“aw101”为0.不要依赖于此。

顺便说一句,Perl会警告你所有这些,但不是默认的。你必须turn on strict and warnings和我高度建议你做,并处理它带来的所有问题。它会节省你(和我们)很多时间。

相关问题