Как проверить, был ли найден результат поиска? - PullRequest
0 голосов
/ 03 февраля 2011

Я выполняю этот поиск, где $_ может быть 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 ]

2 голосов
/ 03 февраля 2011

Перебирать записи объекта поиска. Если атрибут не существует, он будет undef (конечно), но не приведет к сбою, поскольку мы не пытаемся разыменовать вызов метода из него.

foreach my $entry ($m->entries) {
    my ($uid, $sAMAccountName) = (
        $entry->get_value('uid'),
        $entry->get_value('sAMAccountName'),
    );
}
0 голосов
/ 27 февраля 2011

Поскольку ваш фильтр:

(objectClass=Person)

Тогда вы не получите никаких записей, когда $ _ является группой.

Так что вместо этого ужасного вызова define () проверьте, не$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";
}
...