MooseX::InstanceTracking - Trait for tracking all instances of a class
package Employee; use Moose; use MooseX::InstanceTracking; my $merrill = Employee->new; my $howard = Employee->new; Employee->meta->instances; # $merrill, $howard (or $howard, $merrill) Employee->meta->get_all_instances; # $merrill, $howard (or $howard, $merrill) package Employee::Chef; use Moose; extends 'Employee'; my $kalin = Employee::Chef->new; Employee->meta->instances; # $merrill, $howard (or $howard, $merrill) Employee->meta->get_all_instances; # $merrill, $howard, $kalin (or $howard, $merrill, $kalin)
This extends your metaclass by providing instance tracking. Every object that is instantiated will be tracked on the metaclass. This can be useful if you need to interact with all the live objects for some reason.
There are two traits: a class trait, which adds the instance store and accessors for it; and a constructor trait, which ensures that even instances generated by inlined constructors are tracked.
Returns the unordered set of instances of this direct class. Instances of subclasses are not included in this set.
Returns the unordered set of instances of this direct class and all of its subclasses.
You should probably not call these methods. If you extend Moose by adding some way to construct objects outside of "construct_instance" in Moose::Meta::Class, you are crazy but you'll need to call these methods.
Begins tracking the instance(s) passed.
Explicitly stops tracking the instance(s) passed. You do not need to call this if your instance is garbage collected, since we use Set::Object::Weak. However if your instance leaves the class some other way, you may need to explicitly call this. For example, this can happen in core Moose when an instance is reblessed.
Shawn M Moore,
Copyright 2009 Shawn M Moore.