in reply to Eek! goto?

($a,$b,$c) = unpack("V3",pack("C12",@k[0..7],0,@k[8..10]))

assuming $a, $b, and $c start off at 0. This gives warnings for missing arguments in the pack if @k is short.

--- print map { my ($m)=1<<hex($_)&11?' ':''; $m.=substr('AHJPacehklnorstu',hex($_),1) } split //,'2fde0abe76c36c914586c';