检查不在数组中的特定值

Fut*_*eek 1 perl compare

我有一个包含两个值的数组,如果输入不在该数组中,则需要执行一些操作.

我尝试过

if ($a ne ('value1' || 'value2')

if (($a ne 'value1' ) || ($a ne 'value2' ))
Run Code Online (Sandbox Code Playgroud)

这两种方法都不起作用.有人可以帮忙吗?

Bor*_*din 7

你可以使用none来自的功能List::MoreUtils.

如果您的主题行确实有一个数组,那么您的代码将如下所示

use List::MoreUtils 'none';

if ( none { $_ eq $a } @array ) {
  # Do stuff
}
Run Code Online (Sandbox Code Playgroud)

或者如果你真的有两个常数,那么你可以使用它

if ( none { $_ eq $a } 'value1', 'value2' ) {
  # Do stuff
}
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我更愿意看到

if ( $a ne 'value1' and $a ne 'value2' ) {
  # Do stuff
}
Run Code Online (Sandbox Code Playgroud)

  • @ G.Cito:我喜欢给智能匹配或与之相关的任何东西,这是一个非常广泛的问题,我不得不使用Perl 6版本编写任意数量的代码.问题是它试图成为一个*DWIM*运算符,并且不可能记住它对任何给定的参数组合的作用.我很快就会说出我的意思并获得正确的结果,并让其他人理解我的代码 (2认同)

cho*_*oba 5

如果$ a与第一个元素不同,则它不在数组中,并且它与第二个元素不同.

if ($x ne 'value1' and $x ne 'value2') {
Run Code Online (Sandbox Code Playgroud)

对于任何大小的真实数组:

if (not grep $_ eq $x, @array) {
Run Code Online (Sandbox Code Playgroud)

(我用$x的不是$a,因为$a是特殊的-见perlvar.)

  • 储备和流量控制; 在表达式中使用&& (2认同)