#!perl -s $/ = undef; my $data = ; # remove all non numeric characters from $_ $data =~ s/[^\d]//g; # take 3 digits at a time and convert them to a char $data =~ s/(\d{3})/chr($1)/egx; @data = split('', $data); my @letters; for (my $i = 1; $i <= @data / 2; $i++) { push @letters, $data[$i] ^ $data[-$i]; } print join('', @letters); __DATA__ 042123185208084070254140 01 01 700 Combat Squirrel's 772 4017 1061 17923 f i r s t 71340 190970 421301 0408004 J A P H 4064086 12005007 30590112 2706606512724413622702921714903722210122 6***1*5*9*1*0*2*0*3**2*1*6*3*2*0*4*0*4***9