5的返回值> 6是undef。但是,当我指定值5> 6是定义变量的变量。如何使用在失败时解析为undef的比较运算符传递语句的值?
#!/usr/bin/perl
use strict ;
use warnings;
print'Five is more than six ? ', 5 > 6, "\n";
print 'Five is less than six ? ' , 5 < 6 , "\n";
my $wiz = 5 > 6 ;
if (defined($wiz)) {
print '$wiz is defined' ;
} else {
print '$wiz is undefined' ;
}
$ ./lessthan
Five is more than six ?
Five is less than six ? 1
$wiz is defined
答案 0 :(得分:4)
5 > 6
未定义,但它是假值。在这种情况下,dualvar
用作字符串时用作空字符串,或者用作数字时用0
。
因为值为false,所以您可以执行
if ( $wiz ) { ... }
如果你真的想要$wiz
未定义,你可以这样做。
my $wiz = 5 > 6 || undef;
现在,如果表达式5 > 6
为真,则$wiz
将为1
,否则为undef
。
答案 1 :(得分:4)
如何使用在失败时解析为undef的比较运算符传递语句的值?
一般来说,Perl不承诺从其运算符返回任何特定的true或false值,<
也不例外。如果你想要特定的值,你需要像
$boolean ? $value_for_true : $value_for_false
所以
my $wiz = 5 > 6 ? 1 : undef;
如果您只关心虚假的价值,您还可以使用以下内容:
my $wiz = 5 > 6 || undef;
这两个选项相当,但不能保证。
5的返回值> 6是undef。但是,当我指定值5> 6到变量
那不是真的。为变量分配了一个定义的值,因为5 > 6
已计算到定义的值。虽然Perl没有指定它从运算符返回的假值,但它通常会返回标量sv_no
,它是一个双变量,当被视为字符串时看起来是一个空字符串,当被视为一个数字时为零
$ perl -wE'say "> ", "".( undef )'
Use of uninitialized value in concatenation (.) or string at -e line 1.
>
$ perl -wE'say "> ", "".( "" )'
>
$ perl -wE'say "> ", "".( 0 )'
> 0
$ perl -wE'say "> ", "".( 5>6 )'
> # Behaves as ""
$ perl -wE'say "> ", 0+( undef )'
Use of uninitialized value in addition (+) at -e line 1.
> 0
$ perl -wE'say "> ", 0+( "" )'
Argument "" isn't numeric in addition (+) at -e line 1.
> 0
$ perl -wE'say "> ", 0+( 0 )'
> 0
$ perl -wE'say "> ", 0+( 5>6 )'
> 0 # Behaves as 0
答案 2 :(得分:-1)
布尔值false和undef是两个不同的东西......
比较赋值在布尔上下文中执行,仅返回布尔值,而undef不是布尔值 知道这个
if(defined false){
print "false is also defined thing.."
}else{
print "else .."
}
所以回到问题,似乎比较无法返回undef