Perl 比较标量
Perl 有两种类型的比较运算符集。就像其他数学运算符一样,这些运算符不是进行运算,而是比较标量。有 两种 类型的Perl比较运算符集。
一种是用于 数字标量 值,一种是用于 字符串标量值。 这两种类型在下表中都有说明。
数值型 | 字符串 | 描述 |
---|---|---|
== | eq | 等于 |
!= | 等于 | 不等于 |
< | lt | 小于 |
> | gt | 大于 |
<= | le | 小于或等于 |
>= | ge | 大于或等于 |
以上数字和字符串的比较运算符的解释
- == 和 eq : 这个运算符用于检查相等。在下面的代码中,比较了使用==和eq后的代码输出,显示了它对数字和字符串标量的不同作用。
例1:
# Perl program to illustrate
# == operator
# taking two numeric scalars
x = 5;y = 5;
# using "==" operator
if(x ==y)
{
print "== works with numeric value!";
}
输出
== works with numeric value!
例2 :
# Perl program to illustrate
# == and eq operator
# string scalar
str = "geekforgeeks";
if(str == "GEEKSFORGEEKS")
{
print "== doesn't work with string values!";
}
# comparing with capital string
if($str eq "GEEKSFORGEEKS")
{
print "eq works with string values!";
}
输出
== doesn't work with string values!
解释: 在例2的输出中,最后一条打印语句将不会被执行,因为$str和GEEKSFORGEEKS不相等。另外,’g’和’G’的ASCII码是不同的。因此,==在数字值中工作正常,但在字符串值中失败,而eq只对字符串标量工作正常。
- !=和ne
在下面的代码中,我们比较了使用!=和ne后的输出结果,显示了哪一个对字符串正常工作,哪一个对数字标量值正常工作。
例1:
# Perl program to demonstrate the
# != operator
# numeric scalars
x = 5;y = 10;
# using != operator
if(x !=y)
{
print "!= works with numeric value!";
}
输出
!= works with numeric value!
例2 :
# Perl program to demonstrate the
# != and ne operator
# string scalar
str = "geekforgeeks";
# using != operator
if(str != "GEEKSFORGEEKS")
{
print "\n!= doesn't work with string values!";
}
# comparing with capital string
if($str ne "GEEKSFORGEEKS")
{
print"ne works with string values!";
}
输出
ne works with string values!
解释: 在第二个例子中,第一个打印语句不会被执行,因为!=将两个字符串都转换为0。因此,!=对数字值工作正常,但在字符串值的情况下失败,ne对字符串标量工作正常。
- ( >或gt)和(<或lt)
在下面的代码中,我们将比较使用(>或gt)和(<或lt)后的输出,看看哪一个对字符串正常工作,哪一个对数字标量值正常工作。
例1:
# Perl program to demonstrate the
# (> or gt) And (< or lt)
# operator
# numeric scalars
x = 4;y = 5;
# using (> or gt) And (< or lt)
if((x<y) and (x lty) )
{
print "< and lt works with numeric value!";
}
if((y>x) and (y gtx) )
{
print "\n> and gt works with numeric value!";
}
输出
< and lt works with numeric value!
> and gt works with numeric value!
例2 :
# Perl program to demonstrate the
# (> or gt) And (< or lt)
# operator
# string scalar
str = "geekforgeeks";
if(str < "GEEKSFORGEEKS")
{
print "< doesn't work with string values!";
}
# comparing with capital string
if(str lt "GEEKSFORGEEKSZZZ")
{
print"lt works with string values!";
}
# comparing with capital string
if(str gt "GEEKSFORGEEKSZZZ")
{
print"gt works with string values!";
}
# comparing with capital string
if($str lt "kEEKSFORGEEKS")
{
print"\nlt works with string values!";
}
输出
gt works with string values!
lt works with string values!
解释: 上面的代码告诉我们一些关于Perl如何处理字符串的有趣事情。第一个例子的输出非常明显,因为字符串和数字运算符对数字标量的处理方式是一样的。
但是在第二个输出中,”lt “的表现并不像我们所期望的那样。假设Perl的 “lt “运算符不区分大小写,但我们甚至在后面加上了 “ZZZ”,即使在这种情况下,$str也没有小于引号中的字符串,而接下来的输出显示它是大于引号的。这一点可以从第二个例子的第二行输出中看出
Perl的字符串运算符只先检查String的第一个字符,然后比较ASCII码。因为在ASCII表中,正楷字母排在第一位。Perl编译器先匹配第一个字母,然后再匹配其他的字母。
- ( >= 或 ge) 和 (<= 或 le)
这些运算符也对ASCII值起作用,在字符串运算符的情况下检查ASCII值。在数字运算符的情况下,会检查数值。
例子
# Perl program to demonstrate the
# (>= or ge) And (<= or le)
# operator
# numeric scalars
x = 5;y = 10;
if((x <=y) and (y >=x))
{
print "<= and>= works";
}
# string scalar
str= "geeksforgeeks";
if ((str le "keeksforgeeks") and ($str ge "feeksforgeeks"))
{
print "\nle and ge works!";
}
输出
<= and>= works
le and ge works!
要记住的要点
- 当我们用==、>=或<=等数字 运算符 比较两个字符串标量时,它总是将标量转换为0或0.0。因为它们不是字符串。因此,在==、>=或<=的情况下,如下面的例子所示,这将是真的。
# Perl program to illustrate
# above point
# numeric scalars
x = "BBB";y = "aaa";
if ((x ==y and (x <=y) and (x >=y)))
{
print "True";
}
输出
True
解释: 在上面的代码中,”aaa “在各方面都小于BBB(小写字母和a的ASCII值大于B),但两个字符串仍然相等,因为数字比较运算符将字符串转换为0。
- 字符串运算符 不比较数字值,而是 比较它们的ASCII值。 字符串运算符比较数字值的ASCII值。在下面的例子中,”9 gt 17 “是真的,但 “17 gt 9 “的结果是假的。
# Perl program to illustrate
# above point
# numeric scalar
x = 9;y = 17;
if (x gty)
{
print "True";
}
输出
True