use warnings; use strict; @ARGV == 2 or die "usage: $0 in_filename out_filename\n"; # get first argument, i.e filename my $in_filename = shift; print "You chose input <$in_filename>\n"; my $out_filename = shift; print "You chose output <$out_filename>\n"; #set infile to binary mode open INFILE, '<:raw', $in_filename or die "can't open $in_filename: $!"; open OUTFILE, '>', $out_filename or die "can't open $out_filename: $!"; # read 8 bytes at a time $/ = \8; while ( ) { print OUTFILE join( ', ', map sprintf( '0x%04x', $_ ), unpack 'S*', $_ ), "\n"; }