我有一个有两个值的数组,如果输入不在该数组中,则需要执行一些操作。
我试过像
if ($a ne ('value1' || 'value2')
if (($a ne 'value1' ) || ($a ne 'value2' ))
两种方法都不起作用。有人能帮忙吗?
您可以使用List::MoreUtils
中的none
函数。
如果你真的有一个数组,就像你的主题行所说的那样,那么你的代码看起来就像这个
use List::MoreUtils 'none';
if ( none { $_ eq $a } @array ) {
# Do stuff
}
或者如果你真的有两个常数,那么你可以使用这个
if ( none { $_ eq $a } 'value1', 'value2' ) {
# Do stuff
}
但在这种情况下,我更希望只看到
if ( $a ne 'value1' and $a ne 'value2' ) {
# Do stuff
}
$a不在数组中,如果它与第一个元素不同,也与第二个元素不同。
if ($x ne 'value1' and $x ne 'value2') {
对于任何大小的真实阵列:
if (not grep $_ eq $x, @array) {
(我使用$x
而不是$a
,因为$a
是特殊的——请参阅perlvar。)
if ($a ne ('value1' || 'value2')
评估为
if ($a ne 'value1')
和
if (($a ne 'value1' ) || ($a ne 'value2' ))
总是正确的。
你可以试试
if ($a ne 'value1' and $a ne 'value2')
或
if (!grep{$a eq $_} 'value1', 'value2')
基于@Dilbertino(nice nick)的智能匹配解决方案,使用@tobyink的match::simple
来缓解智能匹配消失的痛苦(我已经错过了):
use match::simple;
my @array = qw(abcd.txt abcdeff.txt abcdweff.txt abcdefrgt.txt);
my $x="abcd.txt" ;
say "it's there" if ($x |M| @array );
match::simple
中的|M|
运算符可以替换为match
函数,该函数可以稍微加快速度(它是用XS实现的):
use match::simple qw(match);
my @array = qw(abcd.txt abcdeff.txt abcdweff.txt abcdefrgt.txt);
my $x="xyz.txt" ;
if ( match ( $x, @array ) ) {
say "it's there!" ;
}
else {
say "no hay nada";
}
这很"简单",因为RHS控制行为。使用match::simple
,如果您正在与RHS上的数组进行匹配,那么它应该是一个arrayref。
CCD_ 11还具有CCD_。要使用它,你会做:
if ( $x ~~ none (@array) ) {
say "not here so do stuff ...";
}
附录
这里关于Stackdoverlfow的讨论(请参阅:Perl5.20和智能匹配的命运以及何时给出?)和其他地方(c.f.由@ikegami撰写的Perlmonks文章,大约来自Perl-5.18)给出了智能匹配实验的上下文TLDR事情在未来可能会发生变化,但与此同时,您可以返回时间和use match::smart qw(match);
,使用perl5.8.9再次证明perl永不消亡;它只是回到了自己的生态系统。
在未来,像Smart::Match
这样的东西(,即。非核心CPAN模块,而不是概念)可以帮助用辅助函数来增强简化的智能匹配运算符,这些辅助函数读起来像副词和形容词,并且还有一个额外的好处(据我所知),那就是为perl本身澄清/简化事情,因为~~
运算符的操作上下文不那么模糊。
我会使用带有regex匹配的grep来执行类似的操作
#!/usr/bin/perl
use warnings;
use strict;
my @array = ('value1','value2');
if(grep(/bvalue1b|bvalue2b/, @array)){
print "Not Foundn";
}
else {
print "do somethingn";
}
您还可以使用智能匹配运算符:
除非($x~~['value1','value2'])
您的变量$a
不会被计算为没有[INDEX]
索引的array
,而是被视为标量。
两值array
:
$array[0] = "X";
$array[1] = "Y";
或
@array = qw/X Y/;
使用if
:进行条件检查
if ( $array[0] ne "Your-String" || $array[1] ne "Your-String")