Macos Perl在散列中插入不需要的键

Macos Perl在散列中插入不需要的键,macos,perl,hash,Macos,Perl,Hash,我一直有Perl的问题,这真的很烦人 平台:MacOSX10.7;PerlV5.12.3 示例脚本 #!/usr/bin/perl undef %hash; @letters = qw / a b c /; @numbers = qw / 1 2 3 /; for($i=0;$i<=2;$i++){ $hash{$letters[$i]}=$numbers[$i]; } foreach $key (%hash) { print $key."\n"; } 或 这是P

我一直有Perl的问题,这真的很烦人

平台:MacOSX10.7;PerlV5.12.3

示例脚本

#!/usr/bin/perl

undef %hash;

@letters = qw / a b c /;
@numbers = qw / 1 2 3 /;

for($i=0;$i<=2;$i++){
    $hash{$letters[$i]}=$numbers[$i];
}

foreach $key (%hash) {
    print $key."\n";
}

这是Perl的“特性”吗?我怎么修理它


谢谢

您缺少从哈希中获取密钥的
关键字

for my $key (keys %hash) {
    print $key."\n";
}

否则,散列将平铺到列表中,并返回所有键和值。

您缺少从散列中获取键的

for my $key (keys %hash) {
    print $key."\n";
}

否则,散列将被平铺到一个列表中,并返回所有键和值。

建议使用“键”的答案是正确的,我只是想提醒您始终将
“严格使用;”和“使用警告;”在您的脚本开始时。

建议使用“键”的答案是正确的,我只是想提醒您始终
“严格使用;”和“使用警告;”在脚本的开头。

使用哈希片更快地分配:
@hash{@letters}=@numbers同样,您也无法使用该代码获得输出。你不应该混合和匹配代码和输出,发布与代码一起的输出。这不是一个特性,在本例中是一个bug=)。使用哈希片更快地分配:
@hash{@letters}=@numbers同样,您也无法使用该代码获得输出。你不应该混合和匹配代码和输出,发布与代码配套的输出。这不是一个特性,在本例中是一个bug=)。谢谢!我觉得自己像个白痴。我通常放置键是因为我对它们进行了排序,但我不知道将散列放入列表的“功能”。@IMPERATOR这不是“功能”,它是Perl的核心功能。当放入列表上下文中时,所有变量都会展开为其元素的列表。事实上,它也适用于大多数功能。谢谢!我觉得自己像个白痴。我通常放置键是因为我对它们进行了排序,但我不知道将散列放入列表的“功能”。@IMPERATOR这不是“功能”,它是Perl的核心功能。当放入列表上下文中时,所有变量都会展开为其元素的列表。事实上,它也适用于大多数函数。
for my $key (keys %hash) {
    print $key."\n";
}