要在POE堆上创建/使用数组,只需将引用包装在"@{...}"中即可。
例如:
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
在../poe-test.pl的第26行附近有语法错误,如“][”
由于编译错误,../poe-test.pl的执行被中止。
print ${$heap->{fred}}[0][0];
或者print $heap->{fred}->[0][0];
- Joshua