我有一个像这样的数据结构(具有许多哈希和数组,包含不同的环境、用户、配置文件、访问权限等):
%AR = (
'prod' => {
'username' => {
'access_profile1' => [
'accessright1',
'accessright2',
'accessright3',
'accessrightN',
],
'access_profile2' => [
'accessright7',
'accessright8',
'accessright9',
],
'access_profileN' => [
'accessrightX',
'accessrightX',
'accessrightX',
],
},
},
);
我想给我的脚本一个选项,当启用时,它必须强制结构中的所有配置文件名称都使用标准名称(例如 default_profile)(重新生成它) - 当然这意味着所有访问权限都是唯一的,否则有些可能会覆盖其他访问权限 -
我知道我可以通过简单地循环这个结构并填充一个“新”结构来做到这一点,如下所示:
my $newAR;
foreach my $env ( keys %AR ) {
foreach my $user ( keys %{ $AR{$env} } ) {
foreach my $profile ( keys %{ $AR{$env}{$user} } ) {
# fill the new data structure
foreach my $accessright (@{ $AR{$env}{$user}{$profile} }) {
push (@{ $newAR{$env}{$user}{'default_profile'} }, $accessright);
}
}
}
}
最后给出了正确的结果:
$VAR1 = {
'prod' => {
'username' => {
'default_profile' => [
'accessrightX',
'accessrightX',
'accessrightX',
'accessright7',
'accessright8',
'accessright9',
'accessright1',
'accessright2',
'accessright3',
'accessrightN'
]
}
}
};
在 Perl 中,难道没有一种“更干净”的方式来做到这一点吗?我不太擅长所有映射等,我相信一定有一种更简洁的方式来编写这些嵌套循环。