我有一个如下定义的数组。
我可以获取email
和uid
的值,如下所述。如何获取用户显示名称 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' ) };
}
答案 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 comments,get
已弃用,并未在当前版本的Net::LDAP
中记录。它是was deprecated,在2000年9月的0.21版本中发布,目前是17年前。
相反,您应该使用get_value
,它返回该属性的第一个值。
$uName = $entry->get_value('userdn');