2015-04-03 53 views
0

我想删除的数组引用哈希的关键:如何从Perl中数组引用哈希删除键

如果“钥匙”,我想删除是“测试”,我试过的东西像

$Test = 'Test'; 

foreach my $k (keys %{$line}) { 
    @{$line->{$k}} = grep @{$line->{'$Test'}} != 0, @{$line->{$k}}; 
} 

但我无法将其删除!有人可以告诉我如何删除它吗?

回答

1

perl delete操作执行此操作。参见perlfunc手册:

删除EXPR

鉴于指定的哈希元素,数组元素的散列切片,或阵列切片的表达,删除从哈希或数组中指定的元件(一个或多个) 。在数组的情况下,如果数组元素恰好处于末尾,则数组的大小将缩小到对exists()()存在测试为true的最高元素(如果不存在此类元素,则为0)。

在此讨论:

+0

我想:我的$ K(键%{$行}){如果($ k =〜m/$ Test /){delete @ {$ line - > {$ Test}};} else {next;}}但是没有奏效。我得到的删除参数不是HASH或ARRAY元素或切片... – EpiMan 2015-04-04 00:53:55

+0

'delete'将应用于'$ {$ line} {$ k}'之类的东西,因为这是我理解的哈希名称/值你正在删除。 “@”表示一个数组变量,而“%{$ line}”是一个散列变量。 – 2015-04-04 01:12:40

+0

谢谢,删除$ {$ line} {$ k};工作:) – EpiMan 2015-04-04 01:56:18