I give up...in the last example, why should they ever compare different?
Stewart
>On Thu, May 03, 2001 at 06:28:31PM +0200, Detlef Lindenthal wrote:
> > How can I test if two lists are equal?
> >
> > Examples:
> > These two lists should be equal:
> > @List1a = (1, 2, 3);
> > @List1b = (1, 1+1, 1+1+1);
> >
> > No pair of these should be equal:
> > @List2a = ("one", "two", "three");
> > @List2b = ("two", "one", "three");
> > @List2c = ("one", "two", "three", "four");
> >
> > Is there an elegant way?
> > If not, I can write a sub for it.
> >
>
>perldoc -q arrays
>
>...
>
>How do I test whether two arrays or hashes are equal?
>
>The following code works for single-level arrays. It uses a stringwise
>comparison, and does not distinguish defined versus undefined empty
>strings. Modify if you have other needs.
>
> $are_equal = compare_arrays(\@frogs, \@toads);
>
> sub compare_arrays {
> my ($first, $second) = @_;
> local $^W = 0; # silence spurious -w undef complaints
> return 0 unless @$first == @$second;
> for (my $i = 0; $i < @$first; $i++) {
> return 0 if $first->[$i] ne $second->[$i];
> }
> return 1;
> }
>
>For multilevel structures, you may wish to use an approach more
>like this one. It uses the CPAN module FreezeThaw:
>
> use FreezeThaw qw(cmpStr);
> @a = @b = ( "this", "that", [ "more", "stuff" ] );
>
> printf "a and b contain %s arrays\n",
> cmpStr(\@a, \@b) == 0
> ? "the same"
> : "different";
>
>This approach also works for comparing hashes. Here
>we'll demonstrate two different answers:
>
> use FreezeThaw qw(cmpStr cmpStrHard);
>
> %a = %b = ( "this" => "that", "extra" => [ "more", "stuff" ] );
> $a{EXTRA} = \%b;
> $b{EXTRA} = \%a;
>
> printf "a and b contain %s hashes\n",
> cmpStr(\%a, \%b) == 0 ? "the same" : "different";
>
> printf "a and b contain %s hashes\n",
> cmpStrHard(\%a, \%b) == 0 ? "the same" : "different";
>
>
>The first reports that both those the hashes contain the same data,
>while the second reports that they do not. Which you prefer is left as
>an exercise to the reader.
>
>...
---
Stewart Leicester | "Ad Astra Per Aspera"
JenSoft Technologies | <http://www.id2k.com>
<mailto:[EMAIL PROTECTED]> | Guest passcode: 1069340