Вы должны использовать whenever
, чтобы подписаться на $supply
, иначе подписка не будет связана с блоком supply
(и поэтому, кроме emit
, не работающего, также не получит контроль параллелизма, управление подписками и т. д.).
my $supply = IO::Notification.watch-path( "foo" );
my $parsed = supply {
# Solution: use `whenever` here
whenever $supply -> $v {
emit( { Seen => $v.event } );
CATCH {
default {
$*ERR.say: .message;
}
}
}
}
$parsed.tap( -> $v { say $v });
sleep 40;
(Возможно, иногда это срабатывает: если вы подписываетесь на что-то, что выдает значения синхронно после касания, обработчик emit
окажется в области динамического c фазы установки блока supply
, поэтому в этом случае он может работать.)