I skimmed your code, and nothing obvious jumps out at me (the style of the code could be improved by adding strict, but it doesn't look like that's likely to be the source of the problem). Have you verified that you're using the same version of Net::LDAP on all these machines? (/path/to/perl -MNet::LDAP -le 'print $Net::LDAP::VERSION') Are you using exactly the same code on all the machines, or have you modified some of the variables? If so, that's another place I'd look.
If you could provide a more detailed description of the problem - for example, is the file named in $VALID created, or not, and if it is created, are you saying that it is empty? You can also add debugging statements inside the loops that are fetching the data to see what the LDAP server is returning (before the code filters it with the regex). Often a simple print is enough, or use Data::Dumper with $Data::Dumper::Useqq=1; to see hidden whitespace and other control characters.
Update: Also, how are you running the script, from the command line? Because otherwise (e.g. if you're running it from some kind of task scheduler like cron), the output (error messages) might get swallowed there.