NAME
    Data::Couplet - Yet another (But Hopefully Better) Key-Value Storage
    mechanism

VERSION
    version 0.02004314

SYNOPSIS
      use Data::Couplet;

      # Retain order.
      my $couplet = Data::Couplet->new(   a => $b , c => $d );

      my $output = $couplet->value('a');  # returns $b;

      my $hash = { 'this is a' => 'key' };

      $couplet->set( $hash, "hello");
      $couplet->value( $hash ); # hello

ALPHA CODE
    Lots of stuff is probably still broken, unimplemented, untested.

    User beware

DIFFERENT
    Why is this module different?

    1. No Tied Hashes.
        Tied hashes are IMO Ugly. Objects are far more handy for many
        things. Especially in moose world. You want tied hashes, do it
        yourself.

    2. Trying Hard to preserve non-scalar keys.
        I want it to be possible, to retain arbitrary references used as
        keys.

    3. Permutation.
        Its not here yet, but there *Will* eventually be reordering
        functions.

    I seriously looked all over CPAN for something that suited my needs and
    didn't find any.

    I then tried with Tie::IxHash::ButMoreFun, and then discovered that how
    I was using Tie::IxHash wasn't even sustainable on different versions of
    Perl, and based on the 1997 release date, I gave up on seeing that
    fixed.

METHODS
  CONSTRUCTOR
   ->new( %orderd_pairs )
    Create a new Data::Couplet entity using a series of ordered pairs.

      $c = Data::Couplet->new( 'a' => 'b', 'c' => 'd' );

  ENTRY CREATION
   ->set( Any $object, Any  $value ) : $self : Modifier
    Record the association of a key ( any object that can be coerced into a
    string ) to a value.

    New entries are pushed on the logical right hand end of it in array
    context.

      # { 'a' => 'b', 'c' => 'd' }
      set( 'a', 'e' );
      # { 'a' => 'e', 'c' => 'd' }
      set('e', 'a' );
      # { 'a' => 'e', 'c' => 'd', 'e' => 'a' }

  ENTRY REMOVAL
   ->unset( Array[Any] @objects ) : $self : Modifier
    Entries are ripped out of the structure, and all items moved around to
    fill the void.

      # { 'a' => 'b', 'c' => 'd','e'=>'f' }
      ->unset( 'c' );
      # { 'a' => 'b', 'e'=>'f' }
      ->unset('a');
      # { 'e' => 'f' }

   ->unset_at( Array[Int] @indices ) : $self : Modifier
    Like ->unset, except you know where ( logically ) in the order off
    things the entry you wish to delete is.

      ->unset_at( 1 );
      ->unset_at( 0 );

    Should be identical to the above code.

   ->unset_key( Array[Str] @keys ) : $self : Modifier
    This is what ->unset ultimately calls, except ->unset does implicit
    object_to_key conversion first. At present, that's not anything huge,
    its just $object to convert it to a string. But this may change at some
    future time. So use that method instead.

  VALUE MANIPULATION
   ->value( Any $object ) : Any $value
    Returns a value associated with a key object. See "unset" for the
    semantics of what object keys are.

   ->value_at( Int $index ) : Any $value
    Like value, but you need to know where in the data set the item is.

   ->values() : Any @list
    returns an array of all stored values in order.

   ->values_ref() : ArrayRef[Any] $list
    Just some nice syntax for [$o->values]

   ->key_values() : Any @list
    Returns an ordered sequence of key,value pairs, just like that passed to
    the constructor.

      my @d = $o->key_values()
      while( @d ){
        my $key = shift @d;
        my $value = shift @d;
        print "$key => $value\n"
      }

   ->key_values_paired() : Any[ArrayRef] @list
    Returns like ->key_values does but key/value is grouped for your
    convenience

      for ( $o->key_values_paired() ){
        my ( $key, $value ) = @{ $_ };
      }

  KEY MANIPULATION
   ->keys() : @list
    returns all known keys in order

   ->key_at( Int $index ) : String
    Given an index, return the key that holds that place.

   ->key_object( String $key ) : Any $object
    Given a string key, returns the object stored there.

    This is probably very unhelpful to you unless you explicitly asked us
    for our internal key name.

   ->key_object_at( Int $index ) : Any $object
    As with key_object, except partially useful, because you can fetch by
    ID.

  METHODS FROM PLUGINS
    By default, this package imports a few methods from various plug-ins.

    *   Data::Couplet::Plugin::KeyCount

        ->count
        ->last_index
        ->indices

    *   Data::Couplet::Plugin::BasicReorder

        ->move_up
        ->move_down
        ->swap

AUTHOR
    Kent Fredric <kentnl at cpan.org>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2011 by Kent Fredric.

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

