Ste*_*eve 3 arrays perl hash perl-data-structures
首先,如果我在即将发布的帖子中得到任何错误的术语,那么这对我来说仍然是新的.
一些背景,我有一个脚本,检查我们的存档网络配置为一组特定的设置.因此,该脚本会运行许多检查,并将结果添加到该检查的数组中.
例如,确保配置syslog的检查被添加到名为@internalsyslogerror的数组中
运行所有检查后,所有检查的数组都会添加到哈希中,密钥为设备名称.
请注意所有代码都使用严格,使用警告
使用以下命令;
$results{$configs} = [@internalsyslogerror, @bordersyslogerror,
@borderntperror, @borderntperror, @internalntperror,
@bordertacacserror, @internaltacacserror, @enablepasswordchecks,
@internalsnmpkeyserror, @timezoneerror, @configregistererror,
@bannererror, @bootregistererror, @domainnameerror];
Run Code Online (Sandbox Code Playgroud)
我所拥有的问题是提取此信息的最优雅方式,我希望减少为了向脚本添加新检查而必须进行的更改量.目前我将不得不将附加数组添加到上面的代码,然后将解除引用部分添加到处理它的子.
这是我目前所做的去引用和输出数组,然后我通过电子邮件发送.
foreach my $k (keys %results) {
push @results, "<b>$k</b><br>";
if (defined $results{$k}[0] ){
push @results, "$results{$k}[0]";
}
if (defined $results{$k}[1] ){
push @results, "$results{$k}[1]";
}
if (defined $results{$k}[2] ){
push @results, "$results{$k}[2]";
}
if (defined $results{$k}[3] ){
push @results, "$results{$k}[3]";
}
if (defined $results{$k}[4] ){
push @results, "$results{$k}[4]";
}
if (defined $results{$k}[5] ){
push @results, "$results{$k}[5]";
}
if (defined $results{$k}[6] ){
push @results, "$results{$k}[6]";
}
if (defined $results{$k}[7] ){
push @results, "$results{$k}[7]";
}
if (defined $results{$k}[8] ){
push @results, "$results{$k}[8]";
}
if (defined $results{$k}[9] ){
push @results, "$results{$k}[9]";
}
if (defined $results{$k}[10] ){
push @results, "$results{$k}[10]";
}
if (defined $results{$k}[11] ){
push @results, "$results{$k}[11]";
}
if (defined $results{$k}[12] ){
push @results, "$results{$k}[12]";
}
if (defined $results{$k}[13] ){
push @results, "$results{$k}[13]";
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,我可以做我上面做的事情,但不知何故"动态"生成代码
谢谢
foreach my $k (keys %results) {
push @results, "<b>$k</b><br>";
for my $result (@{$results{$k}) {
next if (!defined $result);
push @results, $result;
}
}
Run Code Online (Sandbox Code Playgroud)
甚至
foreach my $k (keys %results) {
push @results, "<b>$k</b><br>";
push @results, grep { defined $_ } @{$results{$k}};
}
Run Code Online (Sandbox Code Playgroud)
编辑:在最后一次推送中修正了错误...