extends qw(AnimalsGame HTMLGame);
NB. Personally I would probably have used roles rather than multiple inheritance though.Learn what object-oriented programming is, then come back and tell us what you think.
It's very difficult to choose good examples for programming tutorials. In this case, the example was too small and self-contained to support modern Perl practices intended to help manage programs of hundreds of lines or more.
"Procedural programming" is a generally meaningless term (even less meaningful than "object-oriented programming"), but I find opportunities for abstraction even in small programs. The procedural makes it difficult to exploit these opportunities.
You're also equating "abstration" with "good", which it isn't. You abstract for practical reasons, not for its own sake.
If you use MooseX::Runnable, though, you write an introspectable class instead of a script. Now a plugin can handle adding this functionality to your script in a structured way, and all you, the developer, have to do is say "mx-run +Restart::Auto My::Class" instead of implementing that functionality manually in your script.
Reuse is always good. Not writing code is even better.
For a simple thing like this, it makes perfect sense to use a simple procedural style and keep it in one file. The Moose version just complicates it beyond necessity. That's true of plenty of real-world programs, too.