我正在尝试使用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;
我做错了什么?
答案 0 :(得分:3)
如果你想用$_->{'pending} == INVALID_APNS && $_->{'token'} eq ''
排除记录,你就是在不正确地否定grep应该包含的内容。这些中的任何一个都应该做你想要的:
! ( $_->{'pending'} == INVALID_APNS && $_->{'token'} eq '' )
或
$_->{'pending'} != INVALID_APNS || $_->{'token'} ne ''