Although it doesn't cause errors, it does truncate the number of printed
lines. 37/50 or 128/200
David
On 2/13/07, David Davis <[EMAIL PROTECTED]> wrote:
It doesn't blow up on me when I run it and type /go 200.
POE .95
Perl v5.8.7
I even upgraded to POE v.9917, and it still worked.
David
On 13 Feb 2007 09:37:38 -0800, Paul Miller <[EMAIL PROTECTED]> wrote:
>
>
>
> I'm including an entire sample program that looks like a great deal
> more than it is... It's just a simple shell that supports three
> commands: /quit, /go and /np.
>
> If you run this and issue a /np; possibly even a /np 200, you'll see
> 50 or 200 lines of randomly generated text. Boring.
>
> However, if you were to run /go 200 you would see the Wheel crash
> horribly. It will still technically function, but in a miserable sort
> of way -- and even though it still sortof works, the output will be
> truncated. I have spent a few hours trying to figure out why, but I
> haven't put my finger on it.
>
> In any case, it seems to me that a POE Wheel should survive put()
> events while readline is already get()ing....
>
> -Paul
>
>
>
>
>
> use strict;
> use POE qw(Wheel::ReadLine);
>
> my $rls = POE::Session->create( package_states => [
> main=>[qw(_start input spam)]
> ]);
>
> sub garbage {
> my $garbage = "";
> $garbage .= chr( (ord ' ') + (int rand 36) ) for 1 .. 80;
>
> return $garbage;
> }
>
> sub input {
> my ($heap, $kern, $input, $exception) = @_[HEAP, KERNEL, ARG0,
> ARG1];
> my $rl = $heap->{wheel};
>
> if( defined $input ) {
> $rl->addhistory($input);
>
> if( $input =~ m/^\s*\/?(?:quit|exit)/ ) {
> exit;
>
> } elsif( $input =~ m/^\s*\/(?:go|spam)\s*(\d*)/ ) {
> $kern->delay( spam => 2, ($1||50) )
>
> } elsif( $input =~ m/^\s*\/(?:np|npspam)\s*(\d*)/ ) {
> $rl->put("** np spam: " . &garbage) for 1 .. ($1||50);
>
> } else {
> $rl->put("** heard: $input");
> }
>
> } else {
> $rl->put("** unknown exception: $exception");
> }
>
> $rl->get("test> ");
> }
>
> sub _start {
> my $heap = $_[HEAP];
>
> $heap->{wheel} = new POE::Wheel::ReadLine( InputEvent =>
> 'input' );
> $heap->{wheel}->get("test> ");
> }
>
> sub _stop {
> delete $_[HEAP]->{wheel};
> }
>
> sub spam {
> my $rl = $_[HEAP]->{wheel};
> my $n = $_[ARG0];
>
> $rl->put("** spam ($_/$n): " . &garbage) for 1 .. $n;
> }
>
> run POE::Kernel;
> exit;
>
>