Thank you for your reply. I believe your system works
for lists. For hashes, things get complicated because
equal hashes may serialize with their keys in
different orders using Data::Dumper or Storable.
FreezeThaw seems to work, though.
So, only Map::Set and Map::Bag now seem relevant, as
they consider order to be irrelevant, and such
behavior is not available from any of the packages
mentioned so far. In the case of Map::Set, duplicates
are also considered to be irrelevant. If anyone
thinks these two modules would be useful let me know.
Otherwise I will not bother posting these to CPAN.
--- END OF RELEVANT DISCUSSION ---
If you're extra curious...
I ran the following code and found that, in my runs,
it always died on the very first iteration:
#!/usr/bin/perl
use Data::Dumper;
for(my $i = 0; $i < 100; $i++) {
my @list = map {
chr(rand(254)+1)
} (0..int(rand(100)));
my %hash1 = map { $_ => 1 } @list;
my %hash2 = map { $_ => 1 } reverse @list;
my $serialized1 = Dumper(\%hash1);
my $serialized2 = Dumper(\%hash2);
die $i unless($serialized1 eq $serialized2);
}
Printing out $serialized1 and $serialized2 showed that
they were unequal strings which represented equal
hashes.
Using Storable::freeze on \%hash1 and \%hash2 didn't
solve the problem, though the format of the frozen
string differs from previously. (It appears binary
and much less human readable if printed).
Using FreezeThaw::freeze did solve the problem.
Thanks!
--- Adekunle Olonoh <[EMAIL PROTECTED]> wrote:
> > 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;
> > }
>
> You may have implemented your module this way, but
> serializing the data
> structure with a module like Data::Dumper will get
> you what you need:
>
> use Data::Dumper;
> my %seen;
> while(1) {
> my @list = some_func();
> my $serialized = Dumper(\@list);
> die if $seen{$serialized};
> $seen{$serialized} = 1;
> }
>
> You might want to also look at Storable and
> FreezeThaw.
>
> --
>
>
_______________________________________________________
>
> Ade Olonoh, BOTTLED SOFTWARE
>
> 317.576.1120 x12 (phone) 317.576.1135 (fax)
>
_______________________________________________________
>
__________________________________________________
Do You Yahoo!?
Send FREE video emails in Yahoo! Mail!
http://promo.yahoo.com/videomail/