1

unpack如果我想用变量前 1000 个字节尝试这个猜测子程序,这种用法是否正确?

#!/usr/bin/env perl
use warnings;
use 5.10.1;

my $var = ...;
my $part = unpack( 'b1000', $var ) ;

sub is_binary_data {
    local $_ = shift;
    (   tr/ -~//c / length  ) >= .3;
}

if ( is_binary_data( $part ) ) {
    say "Binary";
}
else {
    say "Text";
}
4

1 回答 1

4

不,不是因为 unpack 会创建一个由 0 和 1 组成的字符串(最多 1000 个),这肯定会通过 ascii 测试(我相信tr, -~,,c / length是)

我建议只使用substr ($var, 0, 1000)

此外,也许\r并且\n应该出现在tr//.

于 2012-10-05T11:27:25.423 回答