my @set1 = ...; my %h1 = map { $_ => 0 } @set1; my %h2; ( $h1{ $_ } // $h2{ $_ } )++ for @list; #### my @set1 = ...; my %set1 = map { $_ => 1 } @set1; my ( %h1, %h2 ); ( $set1{ $_ } ? $h1{ $_ } : $h2{ $_ } )++ for @list;