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 ); }