Convert a Moose Object into a Subtype

Date: 03 June 2011

Categories: Moose, perl

Have you ever had the situation where you had a parent class but you find out later in the code that you really want a subclass? With perl Moose, it’s really easy to do. Consider the classic point example described in Moose::Cookbook::Basics::Recipe1. Suppose I start with a Point but I decide later that I need that point to shift into 3D. I don’t want to change the values for x and y, I just want to add the new z point.
I’m hacking on a new tool in perl to manage my KVM cluster. Part of it is a RESTful interface using JSON. The objects I’m using are written using Moose and MooseX::Storable to simplify serialization. I can convert objects back and forth between perl objects and JSON all day. Unfortunately, there’s a fly in the ointment. I’m using Dancer to provide the framework for the RESTful interface. The nice thing about Dancer is that it can automatically serialize perl data structures and it can do it via JSON.