use warnings; use strict; use List::Util qw/reduce/; use Data::Dumper; $Data::Dumper::Useqq=1; $Data::Dumper::Indent=0; $Data::Dumper::Terse=1; my $string = "a202005"; print Dumper($string),"\n"; # "a202005" my @chars = map ord, split //, $string; # or: unpack 'C*', $string print Dumper(\@chars),"\n"; # [97,50,48,50,48,48,53] my $xor = reduce { $a ^ $b } @chars; print Dumper($xor),"\n"; # 100 my $chr = chr $xor; # or: pack 'C', $xor print Dumper($chr),"\n"; # "d" my $out = $xor>>4; print Dumper($out),"\n"; # 6 print Dumper(chr $out),"\n"; # "\6"