#!/opt/perl/bin/perl use strict; use warnings; use Benchmark qw(:all); my(@a, @b); @a = 1..6; @b = 1..6; warn "\nArrays Match\n"; check(); warn "\nLast value different\n"; @b = (1,2,3,4,5,5); check(); warn "\nFirst value different\n"; @b = (5,2,3,4,5,6); check(); warn "\nNumber of values different\n"; @b = 1..7; check(); sub check { print '(' . join(',', @a) . ') == (' . join(',', @b) . ")\n"; timethese (1_000_000, { 'Smart Compare Array' => sub { smart_compare() }, 'Foreach Array' => sub { foreach_compare() }, }); if(smart_compare()) { warn "Smart Compare returns true\n"; } else { warn "Smart Compare returns false\n"; } if(foreach_compare()) { warn "Foreach Compare returns true\n"; } else { warn "Foreach Compare returns false\n"; } } sub smart_compare { return 1 if(\@a ~~ \@b); } sub foreach_compare { return 0 if(@a != @b); my $i = 0; foreach (@a) { return 0 if($a[$i] != $b[$i]); ++$i; } return 1; }