在 Perl 中按顺序打印哈希键

vin*_*k89 1 perl hash

我有哈希数组,需要迭代并打印序列中的值 - id,name,mailid

但是当我打印按键的内容时,它一直在打乱。如何打印如下内容:

ID,NAME,EMAIL
vkk,Victor,vkk@test.com
smt,Smith,smt@test.com
Run Code Online (Sandbox Code Playgroud)

这是我的脚本:

my @data = (
            { 
                'mail' => 'vkk@test.com',
                'name' => 'Victor',
                'id' => 'vkk'
            },
            { 
                'name' => 'Smith',
                'mail' => 'smt@test.com',
                'id' => 'smt'
            }
);

print "ID,NAME,EMAIL\n"; #header

for $content (@data){
    for $fields (keys %$content){
        print $content->{$fields}.",";
    }
    print "\n";
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*oss 8

的文档是keys()这样说的:

哈希条目以明显随机的顺序返回。

因此,如果您想按特定顺序提取数据,那么您应该指定该顺序。

for $content (@data){
    for $fields (qw(id name mail)) {
        print $content->{$fields}.",";
    }
    print "\n";
}
Run Code Online (Sandbox Code Playgroud)

或者使用哈希切片来简化代码:

for $content (@data) {
  print join(',', @{$content}{qw(id name mail)}), "\n";
}
Run Code Online (Sandbox Code Playgroud)