undef Perl

undef 在Perl编程语言之一的价值观念可以包含在一个变量。 如果你没有分配一个值,以一个可变、可变将 undef.

这里是一个例子Perl程序:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $var;
print Dumper $var;

$var = 123;
print Dumper $var;

$var = undef;
print Dumper $var;

这个程序将显示:

$VAR1 = undef;
$VAR1 = 123;
$VAR1 = undef;

第一,我们宣布一个变量,但没有分配给它的任何价值: my $var;. 然后帮助 print Dumper $var; 带来的信息的价值这一变到屏幕上 (你可以看到的变量包含 undef). 在那之后我们就分配一个可变数 123和 显示在屏幕上。 然后使用代码 $var = undef; ,我们分配的变量 undef 和再 带来了有关它的信息。

undef 可以在一个元件阵列或价值在哈希:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my @arr = (1, undef, 'three');
print Dumper \@arr;

my %h = (
    a => undef,
);
print Dumper \%h;

经常 undef 被用作为一个特殊的标志。 例如,可以将一个函数,总回报数字,但是在错误的情况下返回 undef.

undef 来自英文字 undefined("定义").

undef 是不是

undef 是一个单一的价值。 这不是一个串 'undef',这不是一个空串 '' 和它不是数 0. 所有不同的价值观。

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

foreach my $var (undef, 'undef', '', 0) {
    print Dumper $var;
}

在这种情况下的散列如果关键的价值 undef 不同的散列没有这样的关键。

如何检查 undef

检查是否值 undef 功能是使用 defined. 值 undef ,如果功能 defined returns false:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

if (!defined($var)) {
    print 'var is undef';
}

这是非常容易写一Saba is_undef,这将返回真的,如果它通过 undef:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);
use Data::Dumper;

sub is_undef {
    my ($maybe_undef) = @_;
    return !defined($maybe_undef);
}

my @arr = (1, undef, 'three');

foreach my $el (@arr) {
    say is_undef($el) ? 'undef' : 'not undef';
}

但是,最不,使用该功能 defined ,没有任何捆扎。

还有另一种方式如何检查,一个变量包含民主基金是 使用操作者 ~~ (这算是称为 smartmatch). 这一声明出现了 Perl5.10,但从Perl5.18使用这个操作者给出一个警告 Smartmatch is experimental at script.pl line 8.. 这里是一样的代码这样的说法:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

if ($var ~~ undef) {
    print 'var is undef';
}

往往最好的方式来检查 undef 是一个功能 defined.

Perl undef 和转换叉

图书馆为工作结果的方式在Perl将Perl值 undefnull 关系图来描述软件所需的依赖:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use JSON::PP;

print encode_json {
    a => undef,
};

这个代码显示 {"a":null}.

相反,在转换从JSON null 变得 undef:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use JSON::PP;
use Data::Dumper;

print Dumper decode_json '[null]';

这个代码显示:

$VAR1 = [
          undef
        ];

功能 ref

该功能的结果 ref 关于 undef 是一个空串 ''. 在这方面 undef 不是不同于串的数字。 为 undef、弦乐和数字的功能 ref returns an empty string:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

foreach my $el ('asdf', undef, 100) {
    print Dumper ref($el);
}

Boolean value

当使用 undef 在逻辑操作 undef 是一个谎言。 这个代码 屏幕文本 false:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

if (undef) {
    print 'true';
} else {
    print 'false';
}

使用的字符串

在这种情况下如果您使用 undef 操作串,而不是 undef将 使用空串 '',但也显示出一个警告。

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

print 'AAA' . $var . 'BBB';
▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

if ($var eq '') {
    print 'equal';
} else {
    print 'not equal';
}

在第一种情况下,警告会显示 Use of uninitialized value in concatenation (.) or string at script.pl line 10., 在第二种情况下 Use of uninitialized value in string eq at script.pl line 8..

使用与数字

在这种情况下如果您使用 undef 操作数字,而不是 undef会 使用的数 0. 但是同样的警告,出现。

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

print $var + 4;
▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

if ($var == 0) {
    print 'equal';
} else {
    print 'not equal';
}

在第一种情况下,警告会显示 Use of uninitialized value $var in addition (+) at script.pl line 8., 在第二种情况下 Use of uninitialized value $var in numeric eq (==) at script.pl line 8..

有趣的是,当使用 的递增运营商 ++ 注意到,没有:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

print $var++;

相关的主题

其他文章