Perl如何比较标量(介绍和代码示例)

  • 先决条件:Perl中的标量
目录先决条件:Perl中的标量Perl有两种比较操作符集。与其他数学运算符一样,这些运算符不是执行操作,而是比较标量。Perl比较操作符有两种类型。
一个用于数值标量值,一个用于字符串标量值。下表说明了这两种类型:
数字 String 描述
== eq 等于
!= ne 不等于
< 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 == "lsbin" ) { print "== doesn't work with string values!" ; }# comparing with capital string if ( $str eq "lsbin" ) { print "eq works with string values!" ; }

输出如下:
== doesn't work with string values!

说明:在示例2的输出中, 由于$ str和lsbin不相等, 因此不会执行Last print语句。另外, " 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 != "lsbin" ) { print "\n!= doesn't work with string values!" ; }# comparing with capital string if ( $str ne "lsbin" ) { print "ne works with string values!" ; }

【Perl如何比较标量(介绍和代码示例)】输出如下:
ne works with string values!

说明:在第二个示例中, 将不会执行第一个print语句, 因为!=将两个字符串都转换为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 lt $y ) ) { print "< and lt works with numeric value!" ; }if (( $y > $x ) and ( $y gt $x ) ) { 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 < "lsbin" ) { print "< doesn't work with string values!" ; }# comparing with capital string if ( $str lt "lsbinZZZ" ) { print "lt works with string values!" ; }# comparing with capital string if ( $str gt "lsbinZZZ" ) { 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值。对于数字运算符, 将检查该值。
例子:
# 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 = "lsbin" ; if (( $str le "keeksforgeeks" ) and ( $str ge "feeksforgeeks" )) { print "\nle and ge works!" ; }

输出如下:
< = and> = works le and ge works!

要记住的要点:
数字运算符将始终将String值转换为0。
当我们将两个字符串标量与==, > =或< =等数值运算符进行比较时, 它将始终将标量转换为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"为true, 但" 17 gt 9"将结果为false。
# Perl program to illustrate # above point# numeric scalar $x = 9; $y = 17; if ( $x gt $y ) { print "True" ; }

输出如下:
True

    推荐阅读