| Data-Container documentation | Contained in the Data-Container distribution. |
Data::Container - Base class for objects containing a list of items
version 1.100840
package My::Container;
use parent 'Data::Container';
# ...
package main;
my $container = My::Container->new;
$container->items_push('some_item');
This class implements a container object. The container can contain any object, scalar or reference you like. Typically you would subclass Data::Container and implement custom methods for your specific container.
When the container is stringified, it returns the concatenated stringifications of its items, each two items joined by two newlines.
Like items_push(), and it also takes a list of items to push into the
container, but it doesn't push any items that are already in the container
(items are compared deeply to determine equality).
Given a package name, it returns those items from the container whose ref()
is equal to that package name.
For example, your container could contain some items of type My::Item::Foo
and some of type My::Item::Bar. If you only want a list of the items of
type My::Item::Foo, you could use:
my @foo_items = $container->item_grep('My::Item::Foo');
Stringifies the data container by concatenating the items together, separated by an empty line.
Adds support for Data::Comparable by autovivifying the container items array.
See perlmodinstall for information and options on installing Perl modules.
No bugs have been reported.
Please report any bugs or feature requests through the web interface at http://rt.cpan.org/Public/Dist/Display.html?Name=Data-Container.
The latest version of this module is available from the Comprehensive Perl Archive Network (CPAN). Visit http://www.perl.com/CPAN/ to find a CPAN site near you, or see http://search.cpan.org/dist/Data-Container/.
The development version lives at http://github.com/hanekomu/Data-Container/. Instead of sending patches, please fork this project using the standard git and github infrastructure.
Marcel Gruenauer <marcel@cpan.org>
This software is copyright (c) 2004 by Marcel Gruenauer.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
| Data-Container documentation | Contained in the Data-Container distribution. |
use 5.008; use strict; use warnings; package Data::Container; our $VERSION = '1.100840'; # ABSTRACT: Base class for objects containing a list of items # Implements a container object. use Carp; use Data::Miscellany 'set_push'; use parent 'Class::Accessor::Complex'; use overload '""' => 'stringify', cmp => sub { "$_[0]" cmp "$_[1]" }; __PACKAGE__ ->mk_new ->mk_array_accessors('items'); sub stringify { join "\n\n" => map { "$_" } $_[0]->items; } sub items_set_push { my ($self, @values) = @_; set_push @{ $self->{items} }, map { ref($_) && UNIVERSAL::isa($self, ref $_) ? $_->items : $_ } @values; } sub prepare_comparable { my $self = shift; $self->items; # autovivify } sub item_grep { my ($self, $spec) = @_; grep { ref($_) eq $spec } $self->items; } 1; __END__