我有一系列哈希。
输出:
$VAR1 = {
'Name' => 'Bob',
'Address' => 'Home',
'DOB' => '01/01/1990',
'Sex' => 'M',
};
$VAR2 = {
'Name' => 'Mary',
'Address' => 'Home',
'DOB' => '01/01/1990',
'Sex' => 'F',
};
我打印到xml文件。但是,当我将此数组打印到xml文件时,我得到:
<Record Address=Home DOB=01/01/1990 Name=Bob Sex=M />
我更喜欢姓名,地址,DOB,性别。
<Record Name=Bob Address=Home Sex=M DOB=01/01/1990 />
按键或键值对数组进行排序也不会使值按正确顺序排列。是否有一个简单的解决方案以所需的顺序打印哈希?
答案 0 :(得分:6)
哈希是explicitly unordered。所以不,你不能这样做。只有两种维持秩序的方式(使用hash
):
类似的东西:
my @fields = qw ( Name Address DOB Sex );
my @ordered_values = @hash{@fields};
或者只是一个简单的:
foreach my $key ( @fields ) {
print "$key=$hash{$key} ";
}
虽然,如果您正在使用XML ...它可能是更好的方法来处理源数据,而不是首先将其填充到哈希中。
我会注意到 - 在编写XML时,您通常不会内联XML内容中的键值,而是作为属性(或子元素):
<Record Address="Home" DOB="01/01/1990" Name="Bob" Sex="M" />
或者:
<Record>
<Address>Home</Address>
<DOB>01/01/1990</DOB>
<Name>Bob</Name>
<Sex>M</Sex>
</Record>
因为通过这样做,您可以使用XML查询工具来匹配特定条件(如xpath
)。