Как поместить массив в кучу POE и отправить или вытолкнуть данные? - PullRequest
3 голосов
/ 08 января 2010

Как поместить массив в кучу POE и передать / извлечь данные в / из него?

Я пытаюсь поместить следующий массив в кучу:

@commands = (
    ["quit",\&Harlie::Commands::do_quit,10],
    ["part",\&Harlie::Commands::do_part,10],
    ["join",\&Harlie::Commands::do_join,10],
    ["nick",\&Harlie::Commands::do_nick,10],
    ["module",\&Harlie::Commands::do_modules,10],
    ["uptime",\&Harlie::Commands::do_uptime,0]
);

И как бы я мог получить доступ к ссылкам на функции, содержащиеся в? В настоящее время я могу запустить их через:

@commands->[$foo]->(@bar);

Буду ли я прав, предполагая, что это будет просто?:

$heap->{commands}->[$foo]->(@bar);

1 Ответ

0 голосов
/ 01 февраля 2010

Чтобы создать / использовать массив в куче POE, это всего лишь случай переноса ссылки в "@ {...}". e.g.:

use strict;
use warnings;
use POE;
use POE::Kernel;

POE::Session->create(
    inline_states =>{
        _start =>   \&foo,
        bar    => \&bar}  
);

sub foo{
    my ($kernel, $heap) = @_[KERNEL, HEAP];
    @{$heap->{fred}} = ("foo","bar","baz");
    $kernel->yield("bar");
}

sub bar{
    my ($kernel, $heap) = @_[KERNEL, HEAP];
    print "Length of array fred... " . ($#{$heap->{fred}}+1) . "\n";
    print "Contents of fred... ";
    foreach(@{$heap->{fred}}){
    print $_ . " ";  }
    print "\n";
}

POE::Kernel->run();

Однако массивы массивов не так просты. Программа, которая логически вытекает из вышесказанного ...

use strict;
use warnings;
use POE;
use POE::Kernel;

POE::Session->create(
    inline_states    => {
    _start =>    \&foo,
    bar    =>    \&bar
    }
    );

sub foo{
    my ($kernel, $heap) = @_[KERNEL, HEAP];

    @{$heap->{fred}} = (
        ["foo","bar","baz"],
        ["bob","george","dan"]
    );
    $kernel->yield("bar");
}

sub bar{
    my ($kernel, $heap) = @_[KERNEL, HEAP];
    print "Length of array fred... " . ($#{$heap->{fred}}+1) . "\n";
    print @{$heap->{fred}}[0][0];

}

POE::Kernel->run();

... просто выдает следующую ошибку.

perl ../poe-test.pl

синтаксическая ошибка в строке 26 ../poe-test.pl, рядом с "] ["

Выполнение ../poe-test.pl прервано из-за ошибок компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...