使用ActivePerl读取二进制文件时出现问题?

chr*_*ris 3 perl binaryfiles activestate

我正在尝试使用以下代码读取二进制文件:

open(F, "<$file") || die "Can't read $file: $!\n";
binmode(F);
$data = <F>;
close F;

open (D,">debug.txt");
binmode(D);
print D $data;
close D;
Run Code Online (Sandbox Code Playgroud)

输入文件是16M; debug.txt只有大约400k.当我查看emacs中的debug.txt时,最后两个字符是^ A ^ C(SOH和ETX字符,根据记事本++),尽管debug.txt中存在相同的模式.文件中的下一行确实有一个^ O(SI)字符,我认为这是该特定字符的第一次出现.

我如何阅读整个文件?

Mva*_*est 5

如果您确实想立即读取整个文件,请使用slurp模式.可以通过设置$/(输入记录分隔符)来打开Slurp模式undef.这最好在一个单独的块中完成,这样您就不会搞砸$/其他代码.

my $data;
{
    open my $input_handle, '<', $file or die "Cannot open $file for reading: $!\n";
    binmode $input_handle;
    local $/;
    $data = <$input_handle>;
    close $input_handle;
}

open $output_handle, '>', 'debug.txt' or die "Cannot open debug.txt for writing: $!\n";
binmode $output_handle;
print {$output_handle} $data;
close $output_handle;
Run Code Online (Sandbox Code Playgroud)

使用my $data的词汇和our $data一个全局变量.