以正确的格式打印哈希值和值?

时间:2016-01-31 20:15:06

标签: perl hash

您好我正在尝试使用每行一个键/值打印散列的值和键,如下所示:

键:值

这是我用来打印哈希的代码:

foreach (sort keys %hash) { print "$_:$hash{$_}\n"; }

这是我得到的输出:

key
:value

为什么我的脚本会在新行上打印值,我该怎么做才能修复它?

2 个答案:

答案 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对多个角色没有帮助。