10. It's Getting Great Press!
I can't remember the last time a Perl module has generated so much discussion, whether in blogs, at conferences or just in general. People who use it nearly always become advocates. Here's a few I was reading just recently:
- http://blog.jrock.us/articles/Myth:%20Moose%20is%20an%20unnecessary%20dependency.pod
- http://avatraxiom.livejournal.com/70947.html
- http://transfixedbutnotdead.com/2008/03/12/doodling-with-moose-part-1/
You would not have to look hard to find many, many more.
9. Makes Creating Objects Fast an Easy!
Whether you are using 'classic' Moose or playing with the new MooseX::Declare I have never used an object system that was so easy and felt like it belonged to Perl. In the best tradition of Perl it makes easy things easy to do, and make the impossible doable. All this with minimal boilerplate.
Not convinced? Check out this comparison of all the stuff you need to write to make a non Moose Perl object approach the functionality of what you get out of the box with Moose.
8. Makes Perl Objects Powerful!
Moose is built on top of a well researched and highly respected Meta Object Protocol which means Moose objects and the framework and software ecosystem being built around it are on very firm foundations. We've been developing on and in Moose for more than three years now and the concepts underlying it are not showing signs of weakness. Usually by now people would be talking of a 'rewrite to get it right' but clearly Moose is pretty right as it is. As a result we can focus our attention on expanding MooseX modules and on advocacy and documentation. Clearly, Moose is the most powerful object system for Perl and is a heavyweight in comparison to other languages with strong object oriented features.
7. Moose Attributes
Removing all the boilerplate associated with creating object attribute reader/writer methods, as well as making it easy to apply type constraints (see for more) was probably the thing that got me interested in Moose to begin with. If Moose only did this, it would still be useful. That fact that this feature is just a small one among many is mind blowing.
6. Moose Baked in Type Constraints and Coercions
Although I've always loved that Perl is a dynamic language, I've often wished it was easier to validate arguments and attributes. There's probably been a dozen or more such systems on CPAN, but Moose Type Constraints mixes the perfect blend of usefulness and wide adoption that met my immediate need while growing with me as a developer. Now I'm a Type Constraint junkie, who spends him time researching more and more esoteric type constraint concepts.
5. Moose Roles are Awesome!
I could say more, but someone smarter has recently done a blog series about Moose Roles that I highly recommend you check out.
4. MooseX
Do a search for "MooseX" on CPAN (here for example) and you are going to get a ton of useful things. This points out not only the energy and excitement of the community, but serves as more proof that Moose was 'done right' the first time. the For a list of recommended MooseX modules see this article.
3. Great Moose Inspired Stuff!
There's more and more stuff showing up on CPAN that is Moose inspired. For example, the recent Catalyst port has revitalized development on this important web application project. Or check out KiokuDB if you are looking for a fast and easy way to persistent your objects. If you are interested in a cutting edge user interface and interface modeling system, see Reaction. I've only scratched the surface here.
2. Documentation, Tests and Online Tutorials.
When I got to Moose, I found there was not only reasonable documentation to help with with the basics, but also a straightforward tutorial that showed how to go about building applications the Moose way. It definitely helped me to grasp the essential bits and it got me started very quickly on the features I found most useful and time saving. For me this was the key to adopting Moose and the online docs really show you the heavy benefits right off the top.
When I needed more examples, I could go straight to the test directory and find scores of useful tests that showed how the system worked as well as provided me very useful code samples.
And the Number One Great Thing about Moose...
1. The Community!
Not only would all the above not be possible without the tireless and creative effort of the group of core developers, but this community has really reached out and brought lots of people into the fold. They are greatly responsive to bug reports and feature requests, maintaining a pace of releases that is truly amazing. This community also has some of the smartest people I've ever had the pleasure to work with. I definitely feel being part of the Moose community has not only made me a better programmer, but a better person as well.
- Mailing List Info
- IRC Chats (Join Channel #moose on irc.perl.org)

[this is good] 0. There is a course you can take at YAPC10, http://yapc10.org
Posted by: rblackwe | 05/11/2009 at 08:54 AM