如何使用get_value获取objectName?

时间:2011-02-03 16:03:06

标签: perl activerecord ldap

此代码

my @bl = ();
foreach my $entry ($m->entries) {
  push @bl, "$entry->get_value('objectName', asref => 0)";
}

print Dumper @bl;

输出

$VAR1 = 'Net::LDAP::Entry=HASH(0x5c70920)->get_value(\'objectName\', asref => 0)';
$VAR1 = 'Net::LDAP::Entry=HASH(0x5c706c0)->get_value(\'objectName\', asref => 0)';
$VAR1 = 'Net::LDAP::Entry=HASH(0x5c70660)->get_value(\'objectName\', asref => 0)';

我不明白为什么会这样做。

如果我将objectName更改为sAMAccountName,则会提供有意义的内容。

如果我转储$m->entries,我会看到

$VAR1 = bless( {
                 'changes' => [],
                 'changetype' => 'modify',
                 'asn' => {
                            'objectName' => 'CN=sandra,OU=list,DC=example,DC=com',
                            'attributes' => []
                          }
               }, 'Net::LDAP::Entry' );

如何使用objectName获取get_value()

更新:第一条评论解决了问题。

2 个答案:

答案 0 :(得分:4)

方法调用不会插入到双引号字符串中。在这种情况下,您似乎根本不需要引号:

my @bl = ();
foreach my $entry ($m->entries) {
  push @bl, $entry->get_value('objectName', asref => 0);
}

或者,更好的是:

my @bl = map { $_->get_value('objectName', asref => 0) } $m->entries;

请注意,易卜拉欣的评论是个坏主意。你永远不应该在对象的内部进行探索;改为使用公共界面。

答案 1 :(得分:0)

FYI objectName这里是对象的DN。要获取/设置它,您应该使用$entry->dn