NAME

Data::MultiValued - store tag- and range-dependant data in a scalar or Moose attribute

VERSION

version 0.0.1_3

SYNOPSIS

use Data::MultiValued::Tags;

my $obj = Data::MultiValued::Tags->new();
$obj->set({
  tag => 'tag1',
  value => 'a string',
});
say $obj->get({tag=>'tag1'}); # prints 'a string'
say $obj->get({tag=>'tag2'}); # dies

Also:

package My::Class;
use Moose;
use Data::MultiValued::AttributeTrait::Tags;

has stuff => (
  is => 'rw',
  isa => 'Int',
  traits => ['MultiValued::Tags'],
);

# later

my $obj = My::Class->new();
$obj->stuff_multi({tag=>'tag1'},123);
say $obj->stuff_multi({tag=>'tag1'}); # prints 123

DESCRIPTION

This set of classes allows you to store different values inside a single object, and access them by tag and / or by a numeric value.

Yes, you could do the same with hashes and some clever use of arrays. Or you could use Array::IntSpan. Or some other CPAN module. Why use these?

  • they are optimised for serialisation, see Data::MultiValued::UglySerializationHelperRole and t/json.t.

  • you get accessors generated for your Moose attributes just by setting a trait

  • tags and ranges interact in sensible ways, including clearing ranges

Where to go from here

Look at the tests for detailed examples of usage. Look at Data::MultiValued::Tags, Data::MultiValued::Ranges and Data::MultiValued::TagsAndRanges for the containers themselves. Look at Data::MultiValued::AttributeTrait::Tags, Data::MultiValued::AttributeTrait::Ranges and Data::MultiValued::AttributeTrait::TagsAndRanges for the Moose attribute traits.

AUTHOR

Gianni Ceccarelli <dakkar@thenautilus.net>

COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by Net-a-Porter.com.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.