分配给变量的Undef值。

时间:2017-01-20 21:46:07

标签: perl undefined

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

3 个答案:

答案 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