Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Доступ к методу объекта


Автор: comtat 14.10.2007, 22:45
Проблема в следующем 
в хэш массив я записываю ссылку на объект класс 
Код

# класс control
..
my $lookup = new select_lookup(\%data, $atribs);
$self->{lookup}{$field} = $lookup;
..

в дальнейшем мне необходимо обратиться к методу класса 
Код

# класс control
..
$val = $self->{lookup}{$key}->Apply($key, $val, $row);
..

на что Perl говорит следующее 
Цитата
Can't call method "Apply" on an undefined value at D:/wwwroot/LinBIS/lib/controls/control.pm ....

в $self->{lookup}{$key} содержится select_lookup=HASH(0x1d42ccc)
как правильно обраться к методу ?

Автор: nitr 14.10.2007, 23:04
comtat, всё же протестируйте побольше ваше приложение, поставьте вывод переменных...
т.к. если съэмулировать ваш код, то всё ок...
Код

#!/usr/bin/perl
use strict;
use warnings;

my %data = ('name1' => 'data1', 'name2' => 'data2');
my $atribs = 'attrib1';
my $lookup = select_lookup->new(\%data, $atribs);
my $test;
my $field = 'field1';
$test->{lookup}{$field} = $lookup;
print $test->{lookup}{$field}."\n";

my $val = $test->{lookup}{'field1'}->Apply(1, 2, 3);
print $val;

package select_lookup;

sub new {
    my $class = shift;
    my $self;
    $self->{'data'} = shift;
    $self->{'attribs'} = shift;

    bless $self, $class;
    return $self;
}

sub Apply {
    my $self = shift;
    my ($key, $val, $row) = @_;
    return "key=$key ; val=$val ; row=$row";
}

1;

Автор: comtat 15.10.2007, 22:37
Все верно работает !! 
Это моя невнимательность меня подвела

nitr огромное спасибо 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)