我正在尝试在perl中将数据打印为hexdump,但看起来它只在我使用十六进制转储值“硬编码”变量时才起作用。在下面的代码中,为第一种情况打印hexdump,但对于第二种情况($ var2),它只打印从文件句柄读取的数据
#!/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);
上述代码的输出是
[root @ abc] #perl code.pl
第一个翻车机是
$ VAR1 ='é'-¯é'-μ';
第二个翻车机是
$ VAR1 ='“\ xE9 \ x92 \ x97 \ xAF \ xE9 \ x92 \ x97 \ xB5”';
看起来perl会在文件句柄输入中出现每个斜杠附加一个额外的反斜杠。如何将文件句柄数据打印为hexdump? c.txt文件的内容是
[root @ abc] #cat c.txt
“\ xE9 \ X92 \ X97 \ XAF \ xE9 \ X92 \ X97 \ XB5”
答案 0 :(得分: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,因为这些只是用来帮助使其具有人类可读性。然后将其打包为十六进制字符串。