I haven't had the opportunity to use Net::LDAP yet, so I will comment on the rest of the code.
Instead of printing line by line, why not use a here-doc for your usage message? Or use Pod::Usage and document your script in POD.
The following might make your defaults stand out more:
my ($user, $pass);
my $host = 'yourserver.yourdomain.com';
my $port = 389;
my $debug = 0;
GetOptions(
'h=s' => \$host,
'p=s' => \$port,
'u=s' => \$user,
'w=s' => \$pass,
'd+' => \$debug,
'q' => \&usage
);
Often, things like if ($debug ne 0) { ... } are better written as if ($debug) { ... }.
I would write debug and status messages to STDERR instead of STDOUT and include $0 (or similar) in error messages.
Hope this helps.
— Arien |