空 `vec()` 不是 False

问题描述 投票:0回答:1

考虑这个例子:

#!/usr/bin/env perl

my $vec0;

# set the first bit of vec0 to false
vec($vec0, 0, 1) = 0;

print "vec0 is " . length($vec0) . " bytes long\n";

if ($vec0) {
  # what
  print "vec0 is True!\n";
}
评估中使用的

vec

 似乎(几乎)总是 True - 这是因为 
vec
 实际上是一个字符串,因此 
$vec0
 是一个包含“”的字符串,根据 Perl,它是 
not False:只有字符串“”和“0”为 False。

(旁白:尽管非零,但这是错误的:

vec($vec0, 5, 1) = 1; vec($vec0, 4, 1) = 1;
因为 0x30 是 

0

)的 ASCII 码

很好:

检查“空”向量的“正确”方法是什么(即所有位设置为 0)? 使用 unpack

 计算位数,正则表达式测试 
m/^\0*$/
,通过从末尾切掉空字节来“规范化”所有向量?  这看起来应该是一个已解决的问题......为什么 Perl 不神奇地对待 
vec
 的真/假?

perl bitvector vec
1个回答
0
投票
您可以使用以下内容:

$vec0 !~ tr/\x01-\xFF//
    
© www.soinside.com 2019 - 2024. All rights reserved.