您好我正在尝试使用每行一个键/值打印散列的值和键,如下所示:
键:值
这是我用来打印哈希的代码:
foreach (sort keys %hash) { print "$_:$hash{$_}\n"; }
这是我得到的输出:
key
:value
为什么我的脚本会在新行上打印值,我该怎么做才能修复它?
答案 0 :(得分:1)
光标正在移动到下一行,因为您的密钥包含换行符。解决方案是从密钥中删除换行。
更具体地说,您肯定希望避免首先使用换行符创建一个键,因此在创建哈希元素之前应该从键中删除它。
你可能是从文件句柄中读取密钥。习惯使用chomp
(删除任何尾随换行符)或s/\s+/z//
(删除任何尾随空格,包括换行符)。
my @keys;
while (<>) {
chomp; # Or: s/\s+\z//;
push @keys, $_;
}
my %hash; @hash{@keys} = @values;
答案 1 :(得分:-2)
试试这个版本的打印循环:
foreach (sort keys %hash) {
my $v = $hash{$_};
s/\s+$//;
print "$_:$v\n";
}
%hash中的键肯定有一些不需要的尾随字符,因此最好在填充%hash时将其过滤掉。例如,而不是:
@hash{@keys} = @vals;
写下这个:
@hash{map { s/\s+$//; $_ } @keys} = @vals;
或者这个:
chmop(@keys);
@hash{@keys} = @vals;
但是chomp
对多个角色没有帮助。