Throwable is a role for classes that are meant to be thrown as exceptions to standard program flow. It is very simple and does only two things: saves any previous value for $@ and calls die $self. Throwable is implemented with Moo, so you can stick to Moo or use Moose, as you prefer.