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:那么,如果该函数说它看起来像一个数字,这意味着它是一个整数类型还是一个只有数字的字符串?