The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
package Event::generic;
use base 'Event::Watcher';
use vars qw(@ATTRIBUTE);
@ATTRIBUTE = qw(source);

'Event::Watcher'->register;

sub new {
    # lock %Event::;

    my $class = shift;
    my %arg = @_;
    my $o = allocate($class, delete $arg{attach_to} || {});
    $o->init(\%arg);
    $o;
}

package Event::generic::Source;

sub new($) {
    return allocate($_[0], {});
}

sub watch(@) {
    return Event->generic("source", @_);
}

1;