LINUX.ORG.RU

Perl вызов класса


0

0

Пытаюсь написать программу для редактирования LDAP через WEB,
в целях изучения PERL и облегчения жизни пользователям.
Нужно просто ведение адресной книги без упоминания о objectClass и ...
Имеющиеся в наличии клиенты JXplorer и GQ пользователи не осилили.

Чтобы не создавать каждый раз соединения, решил создать класс
Server. Но в таком варианте не проходит.

*********
ldap1.pl:
use ConfigINI;
use Server;

my $cfg = ConfigINI->new();
my $ldap = Server->new( $cfg );

my $mesg = $ldap->conn()->search(
base => $cfg->base_dn(),
filter => "(cn=Гаврилова Е.Н.)"
);

*********
Server.pm:
package Server;

use Net::LDAP;
#@ISA = ("Net::LDAP");

sub new {
my $class = shift;
my $self = {};
bless $self, $class;
$self->init(@_);
return $self;
}

sub init {
my $self = shift;
my $cfg = shift;
my $ldap = Net::LDAP->new( $cfg->server, timeout => 5 )
or die "Not connect LDAP-server";
$ldap->bind( $cfg->bind_dn, password => $cfg->bind_passwd );
$self{CONN} = $ldap;
}

sub conn {
my $self = shift;
return $self->{CONN};
}

1;


Телепаты в отпуске. Что именно не рабоает-то?

На первый взгляд код нормальный, "по учебнику".

anonymous
()
Ответ на: комментарий от anonymous

Ошибка вызова search
my $mesg = $ldap->conn()->search(
my $mesg = $ldap->search(

Раскомментируем @ISA = ("Net::LDAP")
my $mesg = $ldap->conn()->search(
my $mesg = $ldap->search(
Пустая строка.

Может зря я так класс в классе сделал?



WinLin
() автор топика
Ответ на: комментарий от WinLin

> Ошибка вызова search

балин.

Какая ошибка-то? "Can't call method ... on undefined value"? "Can't call method ... without a package or object reference"? Еще какая-то?

Проверь, а что у тебя метод conn возвращает, поюзай Data::Dumper

Вообще говоря, никаких проблем с chained оператором -> в перле никогда не было, $foo->some()->other()->do_smth() всегда работало.

anonymous
()
Ответ на: комментарий от anonymous

Включил печать через Data::Dumper.

В классе Server
$self->{CONN} выводит правильную информацию:
хранит объект Net::LDAP.

Уже в ldap1.pl
my $cfg = ConfigINI->new();
my $ldap = Server->new( $cfg );

print Dumper($ldap); # $VAR1 = bless( {}, 'Server' );
print Dumper($ldap->conn); # $VAR1 = undef;

my $mesg = $ldap->conn()->search(
base => $cfg->base_dn(),
filter => "(cn=Гаврилова Е.Н.)"
);

Can't call method "search" on an undefined value at ./ldap1.pl line 16.




WinLin
() автор топика
Ответ на: комментарий от WinLin

Ай блин.

Используй use strict

А то так ты пропустил ошибку:

$self{CONN} = $ldap;

Это запись в %self, а не в $self

Поэтому Data::Dumper тебе честно говорит, что объект $server у тебя основан на пустом хеше.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.