use warnings; use strict; my $file = pop @ARGV; chomp $file; my (@letters, @bin); # added open MESG, '+<' , $file or die $file, ' unavailable: ', $!; while () { # changed to read from the open handle my @characters = split //; push @letters, @characters; push @bin, map { my $c = unpack 'b*', $_ } @characters; # foreach my $letter (@letters) { # my ($ascii) = unpack ("C" ,$letter); # my ($bin) = unpack ("b*",$letter); # my $ordinal = ord $letter; # print "\n1)$letter\n"; # print "2)$ordinal\n"; # print "3)$ascii\n"; # print "4)$bin\n"; # # push is moved above # } } my %letnet; @letnet{@letters} = @bin; # slice replaces the double foreach while (my ($key,$value) = each (%letnet)) { print "$key-->$value\n"; }