В продолжение темы, кусочек реального кода из MuEvent: #= Add an IO::Socket to observe our sub socket(:&cb!, :$socket!, :$poll where 'r'|'w', :%params) { my $p = $poll eq 'r' ?? 1 !! 2; @sockets.push: { :$socket, :poll($p), :&cb, :%params, keep => 1 }; } Семантика конечно хорошо, но по-моему это уже слишком.