#!/usr/bin/perl $/=undef; # turn on slurp mode for reading $_ = <>; # read all data into $_ (from STDIN or @ARGV file( while (length()) { @s = split //, substr( $_, 0, 16 ); print join " ", map { sprintf "%02x", ord($_) } @s; print "\n"; print join " ", map { (/[ -~]/) ? " $_" : '~~' } @s; print "\n\n"; $_ = substr( $_, 16 ); }