To create / use an array on the POE heap is just a case of wrapping the link in "@ {...}". eg:.
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();
However, arrays of arrays are not that simple. A program that logically follows from the above ...
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();
... just gives the following error.
perl../poe-test.pl
.. /poe -test.pl 26, "] ["
../poe-test.pl - .