use Digest::MD5 qw[ md5 ]; sub md5_base32{ join'',map{ ('A'..'Z', 0..5 )[ ord pack 'b5', $_ ] } unpack '(A5)*', unpack'b*', md5( $_[ 0 ] ) } print md5_base32( 'fred' ); XSCAZ54XMU5W0OVYUWYRGZU0RF #### sub md5_base32_2{ join'', ('A'..'Z', 0..5 )[ unpack 'C*', pack '(b5)*', unpack '(A5)*', unpack 'b*', md5 $_[ 0 ] ] }