什么是真正的和虚假的Perl

在Perl编程语言中没有特别的价值观,意味着真正的和虚假的。

任何价值,Perl可以解释为布尔的价值。 例如,串 'Hello' 是真实的。 以下代码显示的串 'true':

▶ Run
#!/usr/bin/perl

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

什么样的价值观都是假的

在Perl编程语言有5个值都是假的。 这样的:

  • undef
  • 0 —0
  • 0.0 号0.0
  • '' —empty string
  • '0' —0行

这里有一个例子,显示,所有这些价值观解释Perl作为一个谎言。 代码显示的5倍字 'false':

▶ Run
#!/usr/bin/perl

foreach my $val (undef, 0, 0.0, '', '0') {
    if ($val) {
        print "true\n";
    } else {
        print "false\n";
    }
}

什么样的价值观是真实的

真理是所有的价值,除了这5,都是假的。

规则

为了记得什么是假的,你可以使用的规则: "所有的那个0是假的比其他'0但真正的'行".

所有这5个值都是假的,如果它们被用来作为编号成为0. 这里的代码,证实了这一点,该代码显示5个零:

▶ Run
#!/usr/bin/perl

foreach my $val (undef, 0, 0.0, '', '0') {
    print $val + 0, "\n";
}

然而,如果使用 use strict;use warnings; (这几乎总是值得做的), 在这种情况下 undef 和空串Perl会显示出警告。

这里是代码和他的工作的结果的情况下 undef:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = undef;

print $var + 0;
Use of uninitialized value $var in addition (+) at script.pl line 8.
0

这里是代码和结果的情况下empty string:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = '';

print $var + 0;
Argument "" isn't numeric in addition (+) at script.pl line 8.
0

0 but true

Perl有这样的价值在布尔环境是真实的,但是,当使用中的 作为数量转换成数字零。 所有这些价值观是串。

例如,串 '0ASDF' 是一例这样的价值。 当作为一个布尔的价值 这串将被解释为真实的。 真的,只有2行,这是谎言— an empty string和一连串其中只包含一个单一的角色的数量是零,行 '0ASDF' 是不是 没有一个为这两条路线,所以它不是一个谎言和真相。

这里的代码显示是什么线 '0ASDF' 是真正的(代码显示的串 'true'):

▶ Run
#!/usr/bin/perl

if ('0ASDF') {
    print 'true';
} else {
    print 'false';
}

如果这一行 '0ASDF' 以用作一个数字,这是解释为0号 (然而,如果包括 use strict;, use warnings; 将是一个警告):

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = '0ASDF';

print $var + 0;
Argument "0ASDF" isn't numeric in addition (+) at script.pl line 8.
0

最着名的使用的 0 but true 的数值发生在Perl数字图书馆,它使用的字符串 '0E0'.

阵列,哈,参考

阵列是真的,如果至少有一个价值。 如果在列没有价值、然后 阵列是错误的。

同样,如果散列拥有至少一个对的数值,然后散是真实的。 如果哈不是 没有对价值观,它是一个谎言。

参考总是真实的,不管什么它是指。 甚至一个参考到一个空阵 [] 或一个空的散列 {} 是的真相。

一个和空字符串

通常写在代码的真相是一种数量之一,并编写的谎言用的 该数量为零。

有趣的是,他认为,规范Perl值来表示的谎言不是数 0和空串 ''.

这里是一个例子,显示了这一点。 我们采取了行 'Hello',这是真理,并与 的元运算符 ! 把它变成一个谎言:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !'Hello';

结果出现在屏幕上文 $VAR1 = '';

如果您使用的操作者 ! 两次,我们获得规范的价值为真相的观点Perl:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !!'Hello';

(屏幕上出现的文本 $VAR1 = 1;).

问题的可读性

通常写在代码的真相是一种数量之一,并编写的谎言用的 该数量为零。 但是,不幸的是,从这些数字还不清楚这是什么意思—的数量(以及可能还有其他数字), 或是一个标志意义,真的。

这里就是一个例子。 在这里1 workers 意味着你需要用一个单一的工作人员(可以被替换为10). 和单位 有 log 意味着启用记录(以及可以替换为只有0到禁止):

my $config = {
    workers => 1,
    log => 1,
};

其他文章