Book: Perlを使ったLDAPアクセス -Net::LDAP Search and Delete-

前回のNet::LDAP Addオペレーションに続いて、Deleteオペレーションの例を挙げます。
Net::LDAP->delete( dn ) を使用します。
bindし、uid=test*で検索し、検索されたエントリのDNを@dns配列にプッシュし、それをdeleteメソッドに渡し、削除・・・という流れです。

test-ldap2.pl

use Net::LDAP;

#
# bind as priviledged user for delete.
#
$ldap = Net::LDAP->new( "localhost" );
$message = $ldap->bind( "cn=Directory Manager", password=>"password" );

if( $message->code == 0 ) {
        print "bind success\n";
} else {
        warn "error with bind: " . $message->error;
        exit( 1 );
}


#
# search with uid=test* and found entry push to array named @dns.
#
$result=$ldap->search( base=>"dc=example,dc=com", filter=>"uid=test*" );

@dns = ();

if( $result->code == 0 ) {
        foreach $entry ($result->entries){
                push @dns, $entry->dn;
        }
} else {
        $ldap->unbind;
        warn "error with search: " . $message->error;
        exit( 1 );
}


#
# delete found entry in @dns
#
$counter=0;
foreach $dn ( @dns ) {
        $result = $ldap->delete( $dn );
        if( $result != 0 ) {
                $counter++;
                print "deleted :" . $dn . "\n";
        } else {
                warn $result->error . "\n";
        }
}

print $counter." entries deleted.\n";
$ldap->unbind;
実行結果
# perl test-ldap2.pl
bind success
deleted :uid=test.0,ou=People,dc=example,dc=com
deleted :uid=test.1,ou=People,dc=example,dc=com
deleted :uid=test.2,ou=People,dc=example,dc=com
deleted :uid=test.3,ou=People,dc=example,dc=com
deleted :uid=test.4,ou=People,dc=example,dc=com
5 entries deleted.
#
#気持ちよくかけました。