in reply to Right job for the tool.
In the Perl environment, OO is relatively simple: it consists of the notion of “blessing” an otherwise-ordinary data structure (usually a hashref), which causes that now-object to be associated with a particular package such that Perl now understands what to do whenever it sees the $varname->methodname(arguments ...) syntax. Whenever this is used, Perl sees that $varname has been blessed, therefore it knows what package it should be able to find sub methodname in. It calls that subroutine with $varname as the implied first argument to the call.
There are details that I have purposely left out, of course, but the essence is there: a data structure is implicitly associated with a package of subroutines, such that subroutines within that package will be called with the data structure as the first argument. So, now you have the two things that you need most: executable code to call to do things and to get answers, and a clearly-defined very-convenient place to put them. The clients of all that goodness, elsewhere in the program, do not have to be concerned with extraneous details, knowing that those details will be resolved at runtime. This gives you most of the essential features and benefits of OO, and Moose builds upon that same foundation to give you even more. It is a very natural and expressive way to work, which is why I think it became so universally popular.