use strict; use warnings; use Benchmark qw/cmpthese/; our @arr_1 = 0 .. 8e3; our @arr_2 = 2e3 .. 1e4; cmpthese -5, { OPdiff => q[ my %diff3; @diff3{@arr_1} = @arr_1; delete @diff3{@arr_2}; my @diff = ( keys %diff3 ); ], OPdiffModified => q[ my %diff3; @diff3{@arr_1} = (); delete @diff3{@arr_2}; my @diff = ( keys %diff3 ); ], OPdiff_undef => q[ my %diff3; undef @diff3{@arr_1}; delete @diff3{@arr_2}; my @diff = ( keys %diff3 ); ], using_vec => q[ my $vec = ''; vec( $vec, $_, 1 ) = 1 for @arr_2; my @diff = grep !vec( $vec, $_, 1 ), @arr_1; ], hash_grep => q[ my %arr_2_hash; undef @arr_2_hash{@arr_2}; my @diff = grep !exists $arr_2_hash{$_}, @arr_1; ], }; __END__ C:\test>1064178-b.pl Rate OPdiff hash_grep OPdiffModified OPdiff_undef using_vec OPdiff 95.3/s -- -48% -52% -54% -65% hash_grep 184/s 93% -- -8% -10% -32% OPdiffModified 200/s 109% 8% -- -3% -26% OPdiff_undef 205/s 115% 11% 3% -- -24% using_vec 271/s 184% 47% 36% 32% --