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.
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.
Some of the points I believe the author is trying to get across:
* Always have "use strict;" (and declare variables scope)
* Make use of CPAN (eg. Term::Readline)
* Don't use indirect object syntax
* And use Moose if doing OO
These are all good modern perl practices.
The complaints about the early examples are mostly straw men about variable naming and whitespace. The (comparatively) hard part here is the understanding of how the data structure works, and that's something you could stick in a 6-7 line comment...