#!/usr/bin/env perl use 5.010_000; use strict; use warnings; { package Polygon; use Moose; use MooseX::ClassAttribute; class_has 'sides' => ( is => 'rw', isa => 'Int', default => sub { 10 }, ); __PACKAGE__->meta->make_immutable(); #MooseX::ClassAttribute::containing_class()->meta()->make_immutable(); no Moose; no MooseX::ClassAttribute; 1; } { package Triangle; use Moose; use MooseX::ClassAttribute; extends 'Polygon'; class_has '+sides' => ( default => sub { 3 }, ); __PACKAGE__->meta->make_immutable(); #MooseX::ClassAttribute::containing_class()->meta()->make_immutable(); no Moose; no MooseX::ClassAttribute; 1; } say {*STDERR} Polygon->sides; # 10 say {*STDERR} Polygon->new->sides; # 10 say {*STDERR} Triangle->sides; # 3 say {*STDERR} Triangle->new->sides; # 3 exit 0;