在 Perl 中,在 bool 比较中使用空字符串作为 false 是否安全/好的做法?
前任:
my $s = '';
if($s) {
print 'true';
} else {
print 'false';
}
或者长度函数会是一个更好的方法:
my $s = '';
if(length($s) > 0) {
print 'true';
} else {
print 'false';
}
最佳答案
在表达式中测试真/假时,您应该仔细考虑您实际想要测试的内容。
如果你有一个字符串并且你需要检查它是否有任何值,然后测试它:
if (defined $string) { ... }
如果您从函数传回“ bool ”值,或测试某些内部操作的结果,则执行 bool 检查:
if ($value) { ... }
在 Perl 中,“真相”取决于评估它的方式。如果你只是说
if ($value)
,那么唯一计算为 false 的字符串值是空字符串 ''
,和文字零 '0'
. (另外,任何未定义的值都是假的,所以如果 $value
从未被赋值,那也是假的。)还有其他值在数字上下文中可能会评估为 false,例如
0E0
, 0.0000
, 和字符串 '0 but true'
.因此,“什么是真相”这个问题实际上取决于您的程序员需要了解的上下文。在内部,Perl 使用
''
为假和 1
为真(例如作为任何 bool 表达式的结果,如 !$value
)。将任何值“规范化”为这两个值之一的常用技术是 !!$value
-- 它两次反转一个值,给你 ''
或 1
.
关于Perl - 将空字符串用作 false 是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3197203/