Perl - 使用具有多个条件的grep过滤数组元素

时间:2017-03-08 21:59:12

标签: perl

我正在尝试使用grep(在Perl中)过滤数组中的值。 我的目标是删除“pending”元素为INVALID_APNS且“token”元素为空的数组元素

这不起作用 - 它会删除所有内容。该数组在rep之后包含0个元素,但应该包含2个。

use constant INVALID_APNS => -1;
@active_connections = (
    {
        pending => INVALID_APNS,
        token=>'123'
    },
    {
        pending => INVALID_APNS,
        token=>'123'
    },
    {
        pending => INVALID_APNS,
        token=>''
    },


);
 @active_connections = grep { ($_->{pending} != INVALID_APNS) && ($_->{token} ne '')} @active_connections;
 print scalar @active_connections;

我做错了什么?

1 个答案:

答案 0 :(得分:3)

如果你想用$_->{'pending} == INVALID_APNS && $_->{'token'} eq ''排除记录,你就是在不正确地否定grep应该包含的内容。这些中的任何一个都应该做你想要的:

! ( $_->{'pending'} == INVALID_APNS && $_->{'token'} eq '' )

$_->{'pending'} != INVALID_APNS || $_->{'token'} ne ''

请参阅https://en.wikipedia.org/wiki/De_Morgan%27s_laws