package HexDump; $VERSION = "0.12"; use Exporter; @ISA = 'Exporter'; @EXPORT = 'hexdump'; use Encode(); sub hexdump { use bytes; my $length; my %opt = ( -offset => 0 ); if(ref $_[0] eq 'HASH') { my $opts = shift; @opt{keys %$opts} = values %$opts; } foreach(@_) { $length += length; } my $digits = length $length; my $format = " %${digits}d %1s %-47s %-16s\n"; my $offset = $opt{-offset}; while(@_) { local $_ = shift; my $is_utf8 = Encode::is_utf8($_); my $i = 0; { (my $clean = my $cut = substr($_, $i, CHUNKLENGTH)) =~ tr/\0-\37\177/./; printf $format, $offset + $i, $is_utf8 ? '*': '', join(" ", unpack('H*', $cut) =~ /../g), $clean; redo if ($i += CHUNKLENGTH) < length; } $offset += length; } } 1;