2011-02-03 2 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

고마워요 =) –

0

필터이기 때문에 :.

(objectClass=Person) 

그러면 $ _이 그룹 일 때 항목을 검색하지 않습니다.

그래서 끔찍한 defined() 호출 대신 $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"; 
} 
관련 문제