Thanks that code works perfectly, I tested it with the following and it created my contact, "SAMAccountName" isn't a required field for contacts, all they really seem to need is the "dn" and "objectClass" fields.
use strict;
use Net::LDAP;
use Net::LDAP::Entry;
my $ldap_prov = "server";
my $ldap = Net::LDAP->new($ldap_prov) || die;
print ("\nUsername for connection: ");
my $username = <STDIN>;
print ("\nPassword: ");
my $password = <STDIN>;
chomp $username;
chomp $password;
my $bind = $ldap->bind($user, password => $password, $version => 3);
my $contact = Net::LDAP::Entry->new();
my $name = "Bob Smith";
my $email = 'bobs@website.com';
$contact->dn(
"cn=$name,ou=Website External Contacts,"
."dc=corp,dc=website,dc=com"
);
$contact->add(objectClass => 'contact');
$contact->add(name => $name);
$contact->add(displayName => $name);
$contact->add(mail => $email);
$contact->add(targetAddress => "SMTP:$email");
my $result = $contact->update($ldap);
$ldap->unbind;