Right now, when a NetHack::Item is constructed, it parses the description and manually reblesses the instance into the appropriate class. This breaks subclassing, which makes extending NetHack::Item really hard (TAEB has to do a lot of weird reblessing of its own to work around this). If NetHack::Item just did a role application to $self instead, then $self could be any subclass too, and that would continue to work.