$key_arr[0] = pack 'h2', unpack 'H2',
( $lock_arr[0] ^ $lock_arr[-1]
# ^ $lock_arr[-2] ^ 5 ); # not quite right
^ $lock_arr[-2] ^ chr(5) );
####
print unpack 'H*', join '', @lock_arr;
print unpack 'H*', join '', @key_arr;
####
sub keycalc {
my @key = @_;
for (0..$#key) {
$key[$_] = pack 'h2', unpack 'H2',
($_ ? $key[$_] ^ $key[$_ - 1]
# : $key[-1] ^ $key[-2] ^ 5); # same error
: $key[-1] ^ $key[-2] ^ chr(5));
}
@key;
}
print unpack( 'H*', join '', @lock_arr), $/;
print unpack( 'H*', join '', keycalc( @lock_arr)), $/;