Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如果我没有';我不知道它们是什么?_String_Perl_Numbers_Comparison - Fatal编程技术网

String 如果我没有';我不知道它们是什么?

String 如果我没有';我不知道它们是什么?,string,perl,numbers,comparison,String,Perl,Numbers,Comparison,如果我在代码流的某个地方有两个变量$x和$y,我真的不知道它们是否包含数字或字符串,如何比较它们? 我的意思是,对于字符串,我们使用eq等,而对于数字=或使用eq,它总是有效的…如果您不知道数据是字符串还是数字,那么将它们作为字符串处理通常是完全安全的。如果您想将数据视为数字,那么您可能应该验证输入以确保其格式正确。如果您不知道它们是什么,如何询问它们是否相同 "1" "1.0" 具体来说,你认为这两者是相同的吗?< /P> "1" "1.0" 在数字上,它们都表示一个,但严格地说,它们包含

如果我在代码流的某个地方有两个变量
$x
$y
,我真的不知道它们是否包含数字或字符串,如何比较它们?

我的意思是,对于字符串,我们使用
eq
等,而对于数字
=
使用
eq
,它总是有效的…

如果您不知道数据是字符串还是数字,那么将它们作为字符串处理通常是完全安全的。如果您想将数据视为数字,那么您可能应该验证输入以确保其格式正确。

如果您不知道它们是什么,如何询问它们是否相同

"1"
"1.0"
具体来说,你认为这两者是相同的吗?< /P>
"1"
"1.0"

在数字上,它们都表示一个,但严格地说,它们包含不同的字符,因此是不同的。

字符串的大小可以通过cmp来完成

if    ( ( $a cmp $b ) == 0 ) { print "a == b\n" }
elsif ( ( $a cmp $b )  < 0 ) { print "a  < b\n" }
elsif ( ( $a cmp $b )  > 0 ) { print "a  > b\n" }
if(($a cmp$b)==0){print“a==b\n”}
elsif(($a cmp$b)<0){打印“a0){打印“a>b\n”}
重申“123”以上的评论,cmp“56”将给出少于

因此,您可能需要执行以下操作:

if    ( compareEm($a, $b) == 0 ) { print "a == b\n" }
elsif ( compareEm($a, $b)  < 0 ) { print "a  < b\n" }
elsif ( compareEm($a, $b)  > 0 ) { print "a  > b\n" }

sub compareEm {
    my ( $a, $b ) = @_;
    my $isnum = qr/(?=.)(?!^\.$)^[\-\+]?\d*\.?\d*$/o;
    return ( $a =~ $isnum && $b =~ $isnum ) ? $a <=> $b : $a cmp $b;
}
if(compareEm($a,$b)==0){print“a==b\n”}
elsif(compareEm($a,$b)<0){打印“a0){print“a>b\n”}
子比较{
我的($a$b)=;
我的$isnum=qr/(?=)(?!^\.$)^[\-\+]?\d*.?\d*$/o;
返回($a=~$isnum&&$b=~$isnum)$a$b:$a$b;
}

大于/小于等是什么意思?字符串的“大于/小于”是什么意思?一些字典顺序?在Perl中没有类型,因此可以将所有标量作为字符串处理。出于这个原因,“大/小”也会起作用,但
lt
gt
等操作符会将它们作为字符串进行比较。这意味着“123”将小于“56”。在
Scalar::Util
模块中,您可以使用它来检查字符串是否为数字(或者您可以编写一个regexp,具体取决于您的期望,检查整数非常简单)@glezmen:那么,如果该函数说它看起来像一个数字,这意味着它是一个整数类型还是一个只有数字的字符串?