LINUX.ORG.RU

perl - указатель на метод класса


0

0

Подскажите как получить указатель на метод класса и с ним работать 
в perl? Ниже пример и коментарии где не работает!


#!/usr/bin/perl

use strict;



{
 my $x = new test1(2423242);
 $x->print();
}


package test1;

sub new
{
my ($class,$new_x) = @_;
my $self = {state => "INIT"};
$self->{test2} = new test2($new_x);
bless ($self,$class);
return $self;
}


sub print
{
 my ($self)=@_;
 my $temp;
 my $func = $self->{test2}->{func};
 &$func($temp); # Вот тут ругается!!! Как правильно делать?
 print $$temp . "\n";
}


package test2;

sub new
{
my ($class,$new_x) = @_;
my $self = {state => "INIT",
        xxx => $new_x};
$self->{func} = \&get_xxx; # Правильно ли???
bless ($self,$class);
return $self;
}


sub get_xxx
{
 my ($self)=$_[0];
 $_[1] = \$self->{xxx};
}



★★★

че-то ты фигню какую-то написал.
ты скажи что ты хочешь сделать?
почему вот такой вариант не подошел:
$module = 'module_name';
$func = 'funcname';
$module->$func;

Gin ★★
()

$ cat test.pl
#!/usr/bin/perl

use strict;
use test1;

{
  my $x = test1->new('2423242');
  $x->print();
}gin@ginw:/tmp/9$ cat test1.pm
package test1;

use test2;

sub new {
my ($class,$new_x) = @_;
my $self = {state => "INIT"};
$self->{test2} = test2->new($new_x);
bless ($self,$class);
return $self;
}


sub print
{
 my ($self)=@_;
 my $temp;
 my $func = $self->{test2}->{func};
    $temp = $self->{test2}->$func();
#    $func->get_xxx($temp); # Вот тут ругается!!! Как правильно делать?
     print $temp , "\n";
}

1;gin@ginw:/tmp/9$ cat test2.pm
package test2;

sub new
{
    my ($class,$new_x) = @_;
    my $self = {state => "INIT", xxx => $new_x, func=>'get_xxx'};
    bless ($self,$class);
    return $self;
}


sub get_xxx
{
  my $self = shift;
  return $self->{xxx};
}

1;

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