2011-02-03 44 views
0

我執行此搜索,其中$_可以是針對組或用戶的DN。如何測試搜索結果是否被發現?

my $m = $ldap->search(
    base => "$_", 
    scope => 'base', 
    filter => '(objectClass=Person)', 
    attrs => ['sAMAccountName'], 
); 

if (defined($m->entry->entries->get_value('sAMAccountName'))) { 
    print $m->entry->entries->get_value('sAMAccountName') . "\n"; 
} 

這個問題,這是,如果$_是一組,然後sAMAccountName不存在,並且腳本失敗。我甚至不知道這是否適用於一個用戶=(

有誰知道如何僅打印sAMAccountName如果$_是一個人嗎?

回答

2

遍歷搜索對象的條目。如果屬性不存在,這將是undef(當然),但不會導致失敗的,因爲我們並不試圖取消引用從它的方法調用

foreach my $entry ($m->entries) { 
    my ($uid, $sAMAccountName) = (
     $entry->get_value('uid'), 
     $entry->get_value('sAMAccountName'), 
    ); 
} 
+0

非常感謝=) – 2011-02-03 14:29:12

0

因爲你的過濾器是:

(objectClass=Person) 

然後,當$ _是一個組時,您將檢索不到條目。

因此,而不是那個可怕的定義()調用,檢查是否$m->entries()是空的。

實施例:

my $m = $ldap->search(
    base => "$_", 
    scope => 'base', 
    filter => '(objectClass=Person)', 
    attrs => ['sAMAccountName'], 
); 

my @entries = $m->entries(); 

if (@entries) { 
    print $m->entry->entries->get_value('sAMAccountName') . "\n"; 
} 
相關問題