unit class IRC::Client::Grammar::Actions; use IRC::Client::Message::Numeric; has $.irc; has $.server; method TOP ($/) { $/.make: ($ยป.made, $) } method left-overs ($/) { $/.made: $/.defined ?? !$/ !! ''; } method message ($/) { my %args; my $pref = $/; for qw/nick user host/ { $pref{$_}.defined or next; %args{$_} = ~$pref{$_}; } %args = ~$pref if $pref.defined; my $p = $; loop { if ( $p.defined ) { %args.append: ~$p; } if ( $p.defined ) { %args.append: ~$p; last; } $p = $p; } my %msg-args = irc => $!irc, nick => %args, username => %args, host => %args, usermask => "%args!%args@%args", server => $!server; my $msg; given ~$ { when /^ ([0..9]**3) $/ { $msg = IRC::Client::Message::Numeric.new: :command( $ ), :args( %args ), |%msg-args; } } $/.make: $msg; }