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

I a*_* am 1 perl hash

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

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

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

有人能帮我吗?

谢谢

Kei*_*son 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";
    }
}
Run Code Online (Sandbox Code Playgroud)