2010-01-08 4 views
3

POE 힙에 배열을 넣고 데이터를 /에서/pop하는 방법은 무엇입니까?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] 
); 

을 그리고 어떻게 내에 포함 된 함수 참조에 액세스 할 수있을 것입니다 :

나는 힙에 다음과 같은 배열을 넣어려고? 현재, 내가 통해 실행할 수 있습니다 : 나는 단순히

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

답변

0

가 생성/POE 힙에 배열을 사용하려면? 것입니다 가정에서 올바른겠습니까

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

, 그것의 단지 사건 참조를 "@ {...}"로 둘러 쌉니다. 예컨대 :

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(); 

... 단지 다음과 같은 오류를줍니다.

펄 ../poe-test.pl ../poe-test 라인 (26)의 근처 "] ["

실행시

구문 오류 ../poe-test.pl 때문에 컴파일 errors.`

+0

'인쇄 @에 중단이 .pl {$ 힙은 -> {프레드}} [0] [0] -> {프레드' 는 '인쇄 $ {$ 힙해야한다 }} [0] [0]; ' 또는 'print $ heap -> {fred} -> [0] [0];' – Joshua

관련 문제