2016-09-22 48 views
1

我試圖在perl中將數據打印爲hexdump,但看起來像只有當我使用十六進制轉儲值「硬編碼」變量時它才工作。在下面的代碼,hexdump都被印刷爲第一殼體,但對於第二殼體($ VAR2),它只是打印出從文件讀出的數據處理在perl中將數據打印爲hexdump

#!/usr/bin/perl 
use Data::Dumper; 
$var = "\xE9\x92\x97\xAF\xE9\x92\x97\xB5"; 
print "the first dumper is\n"; 
print Dumper($var); 
my $filename = 'c.txt'; 
open($fh, "<", $filename); 
{ 
local $/; 
$var2 = <$fh>; 
chop($var2); 
} 
close($fh); 
$var5 = $var2; 
print "the second dumper is\n"; 
print Dumper($var5); 

的上面的代碼的輸出是

[根@abc]#perl的code.pl

第一自卸是

$ VAR1 = 'E'-E'-μ';

第二自卸是

$ VAR1 = ' 「\ xE9 \ X92 \ X97 \ XAF \ xE9 \ X92 \ X97 \ XB5」';

看起來像perl會在文件句柄輸入中的每個斜槓上附加一個額外的反斜槓。我如何以hexdump打印文件句柄數據? c.txt文件的內容是

[根@ ABC]#貓c.txt

「\ xE9 \ X92 \ X97 \ XAF \ xE9 \ X92 \ X97 \ XB5」

+1

我想你想打包和解壓縮,http://perldoc.perl.org/perlpackt ut.html。但是我很難弄清楚你是想要第一個還是第二個輸出。或者你只是想弄清楚發生了什麼? –

+0

@丹,我想第一個輸出 – user2896215

回答

1

那麼你能做到這一點

#!/usr/bin/perl 
use Data::Dumper; 
$var = "\xE9\x92\x97\xAF\xE9\x92\x97\xB5"; 
print "the first dumper is\n"; 
print Dumper($var); 
my $filename = 'c.txt'; 
open($fh, "<", $filename); 
{ 
local $/; 
$var2 = <$fh>; 
chop($var2); 
} 
close($fh); 
$var5 = $var2; 
$var5 =~ s/"|\\x//g; 
print "the second dumper is\n"; 
print Dumper(pack("H*",$var5)); 

我使用的搜索和替換,以除去所有的「字符和\ x作爲這些都只是克魯夫特用來幫助使人類可讀。然後收拾它作爲一個十六進制字符串。

+0

甜...那個作品謝謝你! – user2896215