#!/usr/bin/perl use v5.36; use Path::Tiny qw( path ); sub hexdump( $data ) { $data =~ s/\G.{1,16}/ ( $& eq "\0"x16 ? "*" : sprintf "%08X %-50s|%s|", $-[0], "@{[unpack q{(H2)8a0(H2)8}, $&]}", $& =~ y{ -~}{.}cr ) . "\n" /segr . sprintf "%08x\n", length $data } print hexdump( path( $0 )->slurp );