【问题标题】:Read binary data from pipe in perl在 perl 中从管道中读取二进制数据
【发布时间】:2016-11-16 06:49:31
【问题描述】:

我想编写一个 Perl 脚本,它从管道中捕获二进制数据并读取 Perl 内部的二进制数据并将接收到的二进制内容作为文件处理程序处理。

我能够从管道接收二进制内容,问题在于从 Perl 读取数据时二进制格式未正确保存。在 Perl 环境中,不保留 NUL 字符并将其转换为换行符。以下是命令行参数和示例

>more D:\Sample_binary.zip| perl readpipe.pl D:\sample_output.txt

readpipe.pl

local $/;   
my $lines = <STDIN>; # Read the binary data from pipe
open my $IN, "+<", \$lines; # Load the content as file handler
$zip = Archive::Zip->new;
$zip->readFromFileHandle ($IN); # Read ZIP file from the received binary data

【问题讨论】:

  • 这是一个useless use of more(其中more 甚至比cat 更无用,因为它仅对交互使用有用)。 Perl cam 无需使用外部程序就可以很好地读取标准输入。
  • 但是从 Perl 中读取存档可能会简单得多。只需将输入文件名参数传递给 Perl 脚本。
  • 是的。当我们使用catcommand 时,能够读取二进制内容。我目前正在 WINDOWS 平台上检查这个。所以我尝试使用type 命令并获取原始二进制数据。谢谢!!
  • &gt;type D:\Sample_binary.zip| perl readpipe.pl D:\sample_output.txt。现在我可以从管道加载 zip 文件了。
  • 管道只是通过 STDIN 传入数据的一种方式。你也可以这样做:perl readpipe.pl D:\sample_output.txt &lt; D:\Sample_binary.zip

标签: perl pipe


【解决方案1】:

处理二进制数据时,使用binmode(STDIN);。它将阻止 CRLF⇔LF 转换,并禁用任何编码层(由use open 或其他添加)。

NUL 字符在 Perl 环境中不会被保留并转换为换行符。

不,Perl 没有这样做。也许more 是?使用

perl readpipe.pl <D:\Sample_binary.zip

【讨论】:

  • 是的。你是对的。 Perl 允许读取 bin 模式,但更多不允许 NUL 字符。
  • 我说more 实用程序不允许在WINDOWS 中使用NULL 字符。您的回答为解决另一个问题提供了一些想法。非常感谢。
猜你喜欢
  • 2012-03-27
  • 2018-03-02
  • 1970-01-01
  • 2014-02-15
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多