in reply to testing more than one item for equality

Perhaps something like this would help, since it handles an arbitrarily large list of elements, all of which must be equal to your target value for the statement to return true.

#!/usr/bin/perl use strict; use warnings; my $item1 = 'foo'; my $item2 = 'foo'; my @list = ($item1, $item2); my $item3 = 'foo'; if ( scalar (grep { $_ eq $item3 } @list) == scalar @list) { print "All are equal.\n"; }

Another way might be to synthesize a large string of $itemN = $item3 type code, and then eval it.

Hope this helped,
-v.

Update:entire post rendered obsolete by blazar's excellent observation. I should've remembered DeMorgan's Law.

"Perl. There is no substitute."

Replies are listed 'Best First'.
Re^2: testing more than one item for equality
by blazar (Canon) on Oct 18, 2006 at 13:09 UTC
    if ( scalar (grep { $_ eq $item3 } @list) == scalar @list) { print "All are equal.\n"; }

    But that's simply not what he asked for, and even if it were those scalars are redundant, thus making your code bloated without adding to readability, since == imposes scalar context anyway. Thus

    if (grep { $_ eq $item3 } @list == @list) { print "All are equal.\n"; }

    Furthermore, you store into the @list array for the sole purpose of that comparison, but that's not necessary either: indeed checking for all the elements of a list to do something is the same thing as checking none of them not to do that particular thing, hence

    if (grep $_ neq $item3, $item1, $item2) { print "All are equal.\n"; }

      You're right. I forgot my DeMorgan's Law.

      Mea culpa,
      -v.
      "Perl. There is no substitute."