#! C:\perl\bin\perl.exe use strict; use warnings; print checksum('000181080002020202020202'); sub checksum { my $region = shift; $region =~ s/(\w{2})(?!$)/$1,/g; my @region_array = split(/,/, $region); my $total = 0; foreach(@region_array){ $total += hex($_); } print "Total decimal: $total\n"; my $total_hex = sprintf('%X', $total); print "Total Hex: $total_hex\n"; my ($lsb) = $total_hex =~ /([a-zA-Z0-9]{2}$)/; print "LSB: $lsb\n"; my $cs_bin = $lsb ^ 0xff; my $cs_int = sprintf('%d', $cs_bin); print "CS Decimal: $cs_int\n"; my $cs_hex = sprintf('%X', $cs_int); return $cs_hex; }