为什么Perl中的lt和gt不能用于比较实数?

时间:2015-11-10 21:12:20

标签: perl

让我们检查以下perl代码

if ($a lt 0.00 or $a gt 100.000)
{
    print "a must be between 0 and 100 \n";
    exit 1
}
exit 0

让我们说a等于5.上面的代码将以失败状态退出,因为它不在0和100之间。

只需将ltgt替换为它们代表的实际运算符<>,即可得到预期结果。用以9开头的数字替换100也将产生预期的结果。

为什么Perl的比较运算符告诉我5不在0和100之间?

2 个答案:

答案 0 :(得分:11)

ltgt是字符串运算符,您想要使用简单的旧<>。 Perl在值上是多态的,所以它在运算符上是单态的(不像python那样是另一种方式)。

答案 1 :(得分:6)

在perl中,ltgt运算符与<>不同。 perl文档详细说明了这里perlop在理性运算符下面,下面是从文档中提取的:

Binary "<" returns true if the left argument is numerically less than the right argument.
Binary ">" returns true if the left argument is numerically greater than the right argument.
Binary "<=" returns true if the left argument is numerically less than or equal to the right argument.
Binary ">=" returns true if the left argument is numerically greater than or equal to the right argument.
Binary "lt" returns true if the left argument is stringwise less than the right argument.
Binary "gt" returns true if the left argument is stringwise greater than the right argument.
Binary "le" returns true if the left argument is stringwise less than or equal to the right argument.
Binary "ge" returns true if the left argument is stringwise greater than or equal to the right argument.

由于perl没有字符串对象,而整数对象perl必须猜测对象的上下文。 perl可以知道你是在比较一个字符串还是一个整数的唯一方法就是确保ltgt的理性运算符强制将上下文作为一个刺激进行比较<>运算符用于比较整数的上下文