The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!./perl -w

use strict;
use Event;

# $Event::DebugLevel = 4;

my $w=Event->io(fd=>\*STDIN, repeat=>0, cb=>\&callback);

Event->timer(interval=>4, cb=>sub {
		 $w->repeat(!$w->repeat);
		 warn "repeat=".$w->repeat."\n";
		 state($w);
	     });

sub callback {
    my $w = $_[0]->w;
    my $h = $w->fd;
    my $in=<$h>;
    print "You entered: $in";
    if ($in =~ /start|again/) {
	$w->again;
    }
    state($w);
}

sub state {
    my ($w)=@_;
    warn 'Is: '.join(' ', $w->is_active?'ACTIVE':'INACTIVE', 
	      $w->is_suspended?'SUSP':'',
	      $w->is_cancelled?'CANCELLED':'')."\n";
}

print "
This demo shows the function of the repeat flag.  If you press return
while repeat=1 then the watcher will remain active.  If you press
return while repeat=0 then the watcher will become inactive.  If you
type 'again' while the watcher is inactive then again() will be called
in the callback and the watcher should continue to be active.

Granted, this is not very exciting.  :-)

";

Event::loop;