# -*- Perl -*- use strict; use warnings; package Matrix::Named; use Scalar::Util qw/refaddr/; use base 'Matrix'; { my %name; sub name { my $id=refaddr shift; @_ ? $name{$id}=shift : $name{$id}; } sub DESTROY { delete $name{refaddr shift} } } sub new { my $class = shift; my $name = pop; bless(Matrix->new(@_) => $class)->init($name); } sub init { my ($obj,$name)=@_; $obj->name($name); $obj; } # ...