in reply to clusters with hashes
(Update: Having now seen them, I actually like dragonchild and davidrw's answers, above (as well as Herkum's, below), even better, because they redesigned the data structure to be more natural. So my answer, though closer to your original code, is not the one I would choose.)
#!/usr/bin/perl -w + use strict; use warnings; + + my %servers = ( 'server1' => 'cluster1', 'server2' => 'cluster1', 'server3' => 'cluster2', 'server4' => 'cluster2' ); + my %values = ( 'server1' => 20.00, 'server2' => 10.00, 'server3' => 5.00, 'server4' => 15.00, ); + my %cluster_count; + # # Here is where you fill in values, such that... # # $values{'server1'} = <cpu info for server1> # $values{'server2'} = <cpu info for server2> # ... etc ... # # But, I'm going to cheat and do ... + %values = ( 'server1' => 20.00, 'server2' => 10.00, 'server3' => 5.00, 'server4' => 15.00, ); + my %results_by_cluster; + # # Calculate results by cluster, and save cluster counts (this is # necessary for the calculation of averages). # foreach my $srvr (keys (%servers)) { my $cluster = $servers{$srvr}; ++$cluster_count{$cluster}; $results_by_cluster{$cluster} += $values{$srvr}; } + # # Display results # foreach my $cluster (qw(cluster1 cluster2)) { my $avg = $results_by_cluster{$cluster} / $cluster_count{$cluster} +; printf "%20.20s average is: %f\n", $cluster, $avg; }
|
|---|