sub hexdump($data) { $data =~ s/\G(?| ( \0{16} )+ (?{ '*' }) | ( .{1,16} ) (?{ sprintf '%08X %-50s|%-16s|', $-[1], join(' ', unpack('(H2)8a0(H2)8', $1)), $1 =~ tr{[\0-\x1F\x7F-\xFF]}{.}r }) )/$^R\n/xgr; }