作为从perl 5.8迁移到perl 5.30的一部分,无法以排序的方式获得perl嵌套散列。尝试禁用5.30中的散列随机化特性(set PERL_PERTURB_KEYS=0 set PERL_HASH_SEED=0x00),但排序仍然不适用于多级/nested哈希。
除了对perl代码中的foreach键进行排序外,还有其他方法,比如禁用任何环境变量/配置,以便以排序方式将值wrt获得到perl 5.30。也尝试使用废弃的深度:散列::Util(嵌套哈希排序为perl5.6),但没有使用wrt到嵌套/多层哈希。
例句:不工作:
$VAR3 = 'Mapping_1';
$VAR4 = {
'2' => {
'ShortName' => 'Mapping_Tx2',
'FileName' => 'Appl_1.arxml',
},
'1' => {
'ShortName' => 'Mapping_Tx1',
'FileName' => 'Appl_1.arxml',
}
};工作:
$VAR3 = 'Mapping_1';
$VAR4 = {
'1' => {
'ShortName' => 'Mapping_Tx1',
'FileName' => 'Appl_1.arxml',
},
'2' => {
'ShortName' => 'Mapping_Tx2',
'FileName' => 'Appl_1.arxml',
}
};发布于 2022-03-17 14:18:29
Perl的散列没有排序,也没有排序。如果您的代码依赖于Perl 5.8中的特定命令,那么它可能是错误的,而且只是偶然地工作。
你有两个合理的选择。
for (sort keys %hash)而不是for (keys %hash)。这几乎总是正确的approach.Hash::Ordered维护插入顺序.https://stackoverflow.com/questions/71513273
复制相似问题