I don't have a compatible LDAP server to test with, so I can't experiment. Could you try using the ReadBinaryFile() function above translated into Perl:
sub ReadBinaryFile {
my $filename = shift;
my $stream = Win32::OLE->new("ADODB.Stream");
$stream->{Type} = 1; # adTypeBinary
$stream->Open;
$stream->LoadFromFile($filename);
my $retval = Variant();
$stream->Dispatch("Read", $retval);
return $retval;
}
The last 3 lines in the function are written in a way to preserve the VT_UI1|VT_ARRAY variant exactly as it was returned from the stream reader.
In the code you were using, did the $content have the UTF8 flag set? That's about the only thing I can think of right now that would mess up the conversion from a Perl string to a COM byte array.