#!/usr/bin/env perl use 5.010; package Father; use Moose; sub char { lc ref shift } package Son; use Moose; extends 'Father'; package main; say ref($_) . '->char() = ' . $_->char for new Father, new Son; #### Father->char() = father Son->char() = son #### has 'char' => ( is => 'ro', builder => '_build_char', # May override _build_char in subclasses init_arg => undef, # Disallow setting via constructor ); sub _build_char { lc ref shift } #### use MooseX::Declare; class Father { has char => ( is => 'ro', builder => '_build_char', init_arg => undef, ); sub _build_char { lc ref shift } } class Son extends Father { }