#!/usr/bin/perl -w
my
$i
=image_info(
$ARGV
[0]);
foreach
(
sort
keys
%$i
) {
if
(
$i
->{
$_
} =~ /[\001-\037\177-\377]/ && !/error/) {
printf
"%s ->\n"
,
$_
;
hex_print(
$i
->{
$_
});
next
;
}
$i
->{
$_
} =~ s/\000//g;
printf
"%s -> %s\n"
,
$_
,
ref
(
$i
->{
$_
}) ? deref(@{
$i
->{
$_
}}) :
$i
->{
$_
}
};
sub
deref {
my
@args
;
if
(
ref
(
$_
[0]) eq
'ARRAY'
) {
foreach
my
$ref
(
@_
) {
push
(
@args
, deref(@{
$ref
}))
}
}
else
{
@args
=
@_
;
}
'['
.
join
(
','
,
@args
) .
']'
;
}
sub
hex_print {
for
(
my
$i
=0;
$i
<
length
$_
[0];
$i
+=16) {
my
$ss
=
substr
(
$_
[0],
$i
,16);
printf
" %04x: %s "
,
$i
,
join
(
' '
,
grep
!/^$/,
split
(/(..)/,
unpack
(
"H*"
,
$ss
)));
$ss
=~
tr
/\000-\037\177-\377/./;
print
$ss
,
"\n"
;
}
}