如何检查在Perl变量包含 undef

任务。 代码在Perl编程语言的变量。 你需要检查是否值这一变 undef 或没有。

决定

一个变量包含 undef ,才能 defined 变量的回报是假的。 这里的代码显示 文本,如果一个变量包含 undef:

▶ Run
#!/usr/bin/perl

my $foo;

if ( !defined($foo) ) {
    print "foo is undef";
}

错误的决定

检查是否 undef 在一个变量需要使用 defined. 但是它常常发生 什么检查 undef 使用的其他错误的方法。

这里是第一个例子是如何不做到这一点:

▶ Run
#!/usr/bin/perl

my $foo;

if ( !$foo ) { # error!
    print "foo is undef";
}

这个例子是真的只是串 foo is undef ,如果可变 $foo 包含的价值 undef, 但码打印这条线在其他情况。 例如,如果 $foo 包含数量 0 或空串 ''. 这种代码不是检查, $foo 包含 undef, 和检查 $foo 中包含价值的虚假的,这是绝对不相同 undef.

这里是另一个例子不正确验证 undef:

▶ Run
#!/usr/bin/perl

my $foo;

if ( $foo == undef ) { # error!
    print "foo is undef";
}

只有所有完全错误的。 如果可变 $foo 包含一个值 undef,这个代码指纹 地方 foo is undef,但本代码打印这条线在其他情况。 例如,如果在一个变量 $foo包含 串 'Hello'.

操作者 == 的目的是为比较的数字。 在你做的比较,这个操作者将对其参数的数字。 变 $foo ,这是 undef 变为数 0. 和 undef 右的操作者也成为数 0. 零零, 条件被触发。 但零以及一些线,例如 'Hello'.

如果你加入这个代码 use strict;use warnings;,然后Perl会输出 foo is undef,但只是让你知道这是怎么回事 一些奇怪的事情:

Use of uninitialized value in numeric eq (==) at script.pl line 8.
Use of uninitialized value $foo in numeric eq (==) at script.pl line 8.
foo is undef

在一般情况下,它始终是一个非常好的做法始终使用 use strict;use warnings;.

相关的主题

其他文章