测试,如果存在哈希键并在perl中打印哈希值

时间:2012-08-14 00:05:14

标签: perl hash

如果数组中存在键,我想从哈希中打印该键及其值。这是我写的代码。

for($i=0;$i<@array.length;$i++)
{
    if (exists $hash{$array[$i]})
    {
        print OUTPUT $array[$i],"\n";
    }
}

从上面的代码中,我可以打印密钥。但我不知道如何打印该密钥的值。

有人可以帮助我吗?

由于

2 个答案:

答案 0 :(得分:7)

@array.length在语法上是合法的,但绝对不是你想要的。

@array,在标量上下文中,为您提供数组中元素的数量。

length函数(不带参数)为您提供$_的长度。

.运算符执行字符串连接。

因此@array.length获取@array中元素的数量和$_中包含的字符串的长度,将它们视为字符串,并将它们连接在一起。 $i < ...强加了一个数字上下文,所以它很可能被视为一个数字 - 但肯定不是你想要的数字。 (如果@array有15个元素且$_恰好是7个字符长,则该数字应为157,这是一个毫无意义的值。)

计算@array中元素数量的正确方法仅在标量上下文中为@array - 或者,为了使其更明确,scalar @array

要回答您的问题,如果$array[$i],则相应的$hash{$array[$i]}

但是C风格的for循环并不是遍历数组最干净的方法,特别是如果你在每次迭代时只需要值而不是索引。

foreach my $elem (@array) {
    if (exists $hash{$elem}) {
        print OUTPUT "$elem\n";
    }
}

答案 1 :(得分:1)

使用哈希切片的一些替代方法:

foreach (@hash{@array}) { print OUTPUT "$_\n" if defined };

print OUTPUT join("\n",grep {defined} @hash{@array});

(对于那些喜欢打高尔夫球的人)。