相关疑难解决方法(0)

什么!! (双感叹号)是什么意思?

在下面的代码中,从Alias博客文章中,我注意到使用双感叹号!!.我想知道这意味着什么以及我将来可以在哪里找到像这样的Perl语法的解释.(是的,我已经!!perlsyn搜索了).

package Foo;

use vars qw{$DEBUG};
BEGIN {
    $DEBUG = 0 unless defined $DEBUG;
}
use constant DEBUG => !! $DEBUG;

sub foo {
    debug('In sub foo') if DEBUG;

    ...
}
Run Code Online (Sandbox Code Playgroud)

更新
感谢您的所有答案.

以下是我刚发现的与List Squash Operator相关其他内容x!!

perl boolean operators negation

34
推荐指数
2
解决办法
1万
查看次数

Perl中的布尔函数应该返回什么值?

简短的问题

在Perl代码库中一致表示真假的最佳方法是什么?

  • 1/ 0

  • 1/ Perl的本机布尔运算符
    返回的特殊空字符串?

  • undef

  • () (即空列表)?

问题背景

我们都知道Perl在布尔方面非常灵活,就像大多数事情一样.

例如,Perl将以下内容视为false:,undef()数字0(即使写为000或0.0),空字符串'0'(包含单个0位的字符串).Perl将以下作为真:任何其他的标量值,1,-1,在它(一个空格的字符串' '),'00'多个0的串,"0\n"(跟着一个新行"0"), , 'true','false','undef'等等另外,基于阵列to-scalar和list-to-scalar转换意味着你可以经常使用空数组作为假值.(感谢http://perlmaven.com/boolean-values-in-perl获取Perl接受为真或假的标量值的部分列表.)

但是考虑到所有这些被视为true或false的值,Perl布尔函数应该返回什么?

  • 1/0
  • -1/0 (全息)
  • 1/undef
  • 1/""

如果您使用这些约定中的任何一个,您将很快发现您编写的代码的行为与普通的Perl代码不同.您将无法取代$a<$bcustom_less_than($a,$b),并有它的工作原理完全相同.

考虑:

> perl -e 'use warnings; 
           sub my_eq { return ( $_[0]==$_[1] ? 1 : 0 ) }
           print "compare (1==0) <<".(1==0).">>"
                 ." to my_eq(1,0) <<".my_eq(1,0).">>" …
Run Code Online (Sandbox Code Playgroud)

perl boolean undef

7
推荐指数
2
解决办法
6392
查看次数

标签 统计

boolean ×2

perl ×2

negation ×1

operators ×1

undef ×1