使用文件句柄的问题求教

使用文件句柄的问题求教

现有POE中的两个event handler
sub EH1{
     open FILE, "HYQ.txt";
     $_[HEAP]->{'file'} = \*FILE;
}

sub EH2{
    my $filehandler = $_[HEAP]->{'file'};
    my $line = readline ($filehandler);
    print $line;
}

我在EH1中打开一个文件,并把其文件句柄的引用放到session的poe heap中,当执行另一个event handler时从poe heap中取出对这个文件句柄的引用,然后从中读出下一行数据。请问这样的模型可行否?我碰到的问题是从文件中读出了第一行数据以后,就开始报错:
Use of uninitialized value $filehandle in <HANDLE> at IntuitiveClient.pm line 70
.
readline() on unopened filehandle at IntuitiveClient.pm line 70.
可以的。注意执行时的顺序就可以了。
请问“注意执行时的顺序”是什么意思?能具体解释一下吗?


QUOTE:
原帖由 hyqgod 于 2008-4-10 15:41 发表
请问“注意执行时的顺序”是什么意思?能具体解释一下吗?

就是先执行哪个,后执行哪个。
恩,这个我可以保证是先打开了文件,而且我都是文件里头的第一条记录都能读出来的。现在的问题是一旦读出来一条记录以后poe就给我的session发送_stop事件,然后关闭了我的session了,请问这有可能是什么原因导致的。具体的错误:
debug: _client_stop()
Can't call method "stomp" on an undefined value at IntuitiveClient.pm line 88, <$filehandle> line 3.

以上我分析就是因为先收到了_stop事件,然后关闭了,所以当调用$self->stomp->send()函数时就报错了
stop 是因为没有别的事可以做了。
你需要好好了解一下 POE 框架。

读完一行之后,yield 一下吧。
恩,可我其实在每次读完一行之后都有注册一个timer,代码如:
$kernel->alarm( updateReport => (time() + $self->config('Interval')));
这个保证了在interval秒之后会发出updateReport 事件
别着急,试着自己把这些问题搞定,这才是学习的态度……
发帖询问也是试着在解决问题