Hello,

I have written modules for mapping certain complex
data structures by value to scalars.  I am looking for
input on whether I have duplicated another class, or
worse, perl built in functionality of which I am not
aware.

The classes I have written are tentatively named
Map::Hash, Map::Set, Map::Bag, and Map::List.  They
fulfill the same purpose as a perl built-in hash,
except that they accept more interesting keys such as
lists, hashes, sets (represented as perl lists), and
bags (also represented as perl lists).

For instance:

    use Map::Hash;

    my $map = new Map::Hash();
    $map->set( { "Randall" => "Schwartz",
                 "Larry" => "Wall",
                 "Tom" => "Christiansen" },
               "perl authors" );

    $map->set( { "Jon" => "Swartz" },
               "mason" );

    $map->set( { "foo" => 1 } );

    my $a = $map->get( { "Jon" => "Swartz" } );

would result in $a being assigned "mason", even though
the hash reference used in method get() is not the
same reference as the one used in method set().  This
is what I mean by "by value".  These two distinct
references are considered equal because they represent
equal hashes.

To give an idea why this might be useful:  I often
loop, calling a function which returns a list or hash,
and want to easily check if the list or hash I'm
getting back is one I have seen already. The following
doesn't work:

   my %seen;
   while(1)
      {
      my @list = some_func();
      die if($seen{\@list});
      $seen{\@list} = 1;
      }

However, this does:

   my $seen = new Map::List();
   while(1)
      {
      my @list = some_func();
      die if($seen->get(\@list));
      $seen->set(\@list,1);
      }

Map::List, Map::Hash, Map::Set, and Map::Bag all have
similar interfaces.  They differ in how they determine
equality.

Thanks for any advice, including advice on whether I
should consider renaming these classes.

I will post a more detailed explanation of these
modules if the response I get indicates that these
might be a unique contribution to CPAN.

Mark Dilger
[EMAIL PROTECTED]


__________________________________________________
Do You Yahoo!?
Send FREE video emails in Yahoo! Mail!
http://promo.yahoo.com/videomail/

Reply via email to