##
my $re;
if ( @ARGV ) {
my $pat = join "|", map quotemeta, @ARGV;
$re = qr/^(?:$pat)\z/;
}
my %Y;
while ( <> ) {
my ( $y ) = ...;
++$Y{ $y } if $y && ( !$re || $y =~ $re );
}
####
my $re;
my %valid;
++$valid{ $_ } for @ARGV;
my %Y;
while ( <> ) {
my ( $y ) = ...;
++$Y{ $y } if $y && ( !%valid || $valid{ $_ } );
}