我正在尝试使用其他名称更改密钥。尝试下面的代码,但得到一些错误:
my @array = qw(1 hello ue hello 3 hellome 4 hellothere);
my %hash = @array;
foreach (Keys %hash) {
s/ue/u/g;
}
输出错误:test.pl第35行的非法模数为零。
答案 0 :(得分:6)
Perl区分大小写。您正在寻找keys
(小写):
my @array = qw(1 hello ue hello 3 hellome 4 hellothere);
my %hash = @array;
foreach (keys %hash) { # <--
s/ue/u/g;
}
您应该在所有Perl模块/脚本的顶部use strict; use warnings;
。它将为您提供更好的错误消息。
更重要的是,您无法像这样更新哈希键。您必须使用所需名称在哈希中创建新密钥,并删除旧密钥。您可以在一行中很好地完成此操作,因为delete
返回已删除的哈希键的值。
use strict;
use warnings;
my @array = qw(1 hello ue hello 3 hellome 4 hellothere);
my %hash = @array;
foreach my $key (keys %hash) { # <--
if ($key eq 'ue') {
$hash{u} = delete $hash{$key};
}
}
为了进一步收紧代码,实际上并不需要遍历密钥来确定是否存在特定密钥。以下单行可以替换for循环:
$hash{u} = delete $hash{ue} if exists $hash{ue};