use Class::Std; my %example_array_of :ATTR; my %example_hash_of :ATTR; my %example_scalar_of :ATTR; sub BUILD { my ($self, $ident, $args_ref) = @_; my ($other_ident) = keys %example_hash_of; if ( $other_ident ) { $example_array_of{$ident} = $example_array_of{$other_ident}; $example_hash_of{$ident} = $example_hash_of{$other_ident}; $example_scalar_of{$ident} = $example_scalar_of{$other_ident}; } else { $example_array_of{$ident} = []; $example_hash_of{$ident} = {}; $example_scalar_of{$ident} = \do{ my $x = undef }; } } sub get_example_array { return @{$example_array_of{ident shift}}; } sub set_example_array { my $self = shift; @{$example_array_of{ident $self}} = @_; } #### use Class::Std; my @example_array; my %example_hash; my $example_scalar; my $instance_count = 0; sub BUILD { my ($self, $ident, $args_ref) = @_; $instance_count++; } sub DEMOLISH { my ( $self, $ident ) = @_; if ( ! --$instance_count ) { undef %example_hash; undef @example_array; undef $example_scalar; } } sub get_example_array { return @example_array; } sub set_example_array { shift; @example_array = @_; }