从数组中读取值

时间:2017-05-21 18:31:43

标签: perl ldap

我有一个如下定义的数组。

我可以获取emailuid的值,如下所述。如何获取用户显示名称 userdn

my ($mesg) = $ldap->search(
    scope  => 'one',
    base   => $userdn,
    filter => $filter,
    attrs  => [ 'email', 'pwdChangedTime', 'uid' ],
);

这是我阅读电子邮件ID和uid的方式,但我无法读取用户显示名称。

foreach my $entry ( $mesg->all_entries ) {

    $email = ${ $entry->get( 'email' ) }[0];
    $uid   = ${ $entry->get( 'uid' ) }[0];
    $uName = ${ $entry->get( 'userdn' ) };
}

1 个答案:

答案 0 :(得分:4)

这不是关于数组,而是关于如何使用Net::LDAP。您的示例代码中没有数组。

您希望获取LDAP查询返回的项目的 userdn 属性。为此,您需要tell search to fetch those

  

与搜索过滤器匹配的每个条目要返回的属性列表。

这意味着,您需要在search的调用中包含 userdn

my ($mesg) = $ldap->search(
    scope  => 'one',
    base   => $userdn,
    filter => $filter,
    attrs  => [ 'email', 'pwdChangedTime', 'uid', 'userdn' ],
);

现在您可以get userdn

$uName = $entry->get('userdn')->[0];

我在这里使用了箭头取消引用语法而不是${ ... }[0]因为我发现更容易阅读。但是,as ysth points out below in the commentsget已弃用,并未在当前版本的Net::LDAP中记录。它是was deprecated,在2000年9月的0.21版本中发布,目前是17年前。

相反,您应该使用get_value,它返回该属性的第一个值。

$uName = $entry->get_value('userdn');