使用模块'摘要'的Perl中的'错误文件描述符'

时间:2014-09-02 09:10:16

标签: perl module crc digest crc32

我正在尝试为CRC实现Perl摘要,但不幸的是我得到了:

  

摘要读取失败:错误的文件描述符

如何解决此问题?

这是模块示例代码here

sub crc3439() {
    $ctx = Digest::CRC->new(type=>"crc16");
    $ctx = Digest::CRC->new(width=>16, init=>0x2345, xorout=>0x0000,
                            refout=>1, poly=>0x8005, refin=>1, cont=>1);

    my  $binfile = 'envbin.bin';
    open(fhbin, '>', $binfile) or die "Could not open bin file '$binfile' $!";
    binmode(fhbin);

    $ctx->add($binfile);
    $ctx->addfile(*binfile);
    $digest = $ctx->hexdigest;
    return $digest;
}

1 个答案:

答案 0 :(得分:1)

首先,您要覆盖$binfile而不是阅读它。将开放模式更改为'<'应该可以解决这个问题。

您的->addfile正在添加一个不存在的文件句柄;你可能想要*fhbin,或者想要一个词法(my $fhbin)文件句柄。

此外,您使用额外的$ctx电话覆盖->new

sub crc3439 {
    my $binfile = shift;

    my $ctx = Digest::CRC->new(
        type   => "crc16",
        width  => 16,
        init   => 0x2345,
        xorout => 0x0000,
        refout => 1,
        poly   => 0x8005,
        refin  => 1,
        cont   => 1,
    );

    open(my $fhbin, '<', $binfile) or die "Could not open bin file '$binfile' $!";
    binmode($fhbin);

    $ctx->add($binfile);
    $ctx->addfile($fhbin);

    return $ctx->hexdigest;
}


print crc3439('foo.bin');