2016-11-16 171 views
-1

我想編寫一個Perl腳本,它從管道捕獲二進制數據並讀取Perl內的二進制數據,並將接收到的二進制內容作爲文件處理程序進行處理。從管道中讀取二進制數據perl

我能夠從管道接收二進制內容,問題是在從Perl讀取數據時,二進制格式不能正確保存。 NUL字符不會被保留,並在Perl環境中將此字符轉換爲換行符。以下是命令行參數和樣品

>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 
+1

這是一個[無用的'more'](http://www.iki.fi/era/unix/award.html)(其中'more'比'cat'更無用,因爲它僅適用於交互式使用)。 Perl cam無需使用外部程序即可讀取標準輸入。 – tripleee

+0

但是從Perl內讀取檔案可能會更簡單。只需將一個輸入文件名參數傳遞給Perl腳本即可。 – tripleee

+0

是的。當我們使用'cat'命令時,能夠讀取二進制內容。我目前正在WINDOWS平臺上進行檢查。所以我嘗試使用'type'命令並獲取原始二進制數據。謝謝!! –

回答

1

當二進制數據處理,使用binmode(STDIN);。它將阻止CRLF ⇔ LF轉換,並將禁用任何編碼層(由use open或其他添加)。

NUL字符不會被保留,並在Perl環境中將此字符轉換爲換行符。

不,Perl沒有這樣做。或許more是?使用

perl readpipe.pl <D:\Sample_binary.zip 
+0

是的。你是對的。 Perl允許讀取bin模式,但更多不允許NUL字符。 –

+0

我說'more'實用程序不允許在WINDOWS中使用NULL字符。你的回答爲解決另一個問題提供了一些想法。非常感謝。 –