Bonus slides: The parser
package DoQueue::Parser::Task;
Readonly my $ORDER => qr/(?:(\d+):)/;
Readonly my $TASK => qr/([^[]+)/;
Readonly my $META => qr/(?:\[(.+)\])/;
sub parse {
my ($class, $in) = @_;
if ( my ($order, $task, $metadata) = ($in =~ /$ORDER? $TASK $META?/xo) ){
_trim($task);
return { order => $order || 0,
task => $task,
metadata => DoQueue::Parser::Metadata->parse($metadata||''),
};
}
croak 'parse error';
}
sub _trim {
DoQueue::Parser::Metadata::_trim(@_);
}