在下面的代码中,从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代码库中一致表示真假的最佳方法是什么?
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/undef1/""如果您使用这些约定中的任何一个,您将很快发现您编写的代码的行为与普通的Perl代码不同.您将无法取代$a<$b 的custom_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)