Perl - 将空字符串用作 false 是一种好习惯吗?

标签 perl string

在 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/

相关文章:

regex - 解析perl正则表达式中的多行并提取值

perl - 仅当我在 Windows 上时,如何有条件地使用 Perl 模块?

c# - 显示字符串中最常用的元音 C#

php - 确定现有字符串的所有子字符串的最快方法

c++ - 使用 for_each ,复制字符串

c - 打印字符串时出现问题

mysql - perl 在脚本中打包 dbd mysql 模块

mysql - Perl DBI 的 'SELECT COUNT(*)' 返回什么?

perl - 当表单发布到我的脚本时,如何访问 URL 中传递的参数?

string - 在 OCaml 中将字符转换为字符串