my $str = '2001:0db8:3c4d:0015:0000:0000:abcd:ef12';
print join "\n", map { unpack ('B*', pack ('H*',$_)) } split ':', $str;
Output:
0010000000000001
0000110110111000
0011110001001101
0000000000010101
0000000000000000
0000000000000000
1010101111001101
1110111100010010
EDIT
Following lines are culprit in your code. Try removing them.
my $tempbin1 = pack( 's', $elements[0]);
my $tempbin2 = pack( 's', $elements[1]);