Rien de bien compliqué, en fait. Lors du remplissage de %browser_report, tu ajoutes un compteur général.
1 2 3 4 5 6 7 8 9 10
| open my ($in), $logstats;
my %browser_report;
my $total_conn;
while (<$in>)
{
my $browser=(split)[3];
$browser_report{$browser}++;
$total_conn++;
}
close ($in); |
À partir de là, plusieurs possibilités, mais principalement deux : calculer les pourcentages à la volée lors de l'affichage, ou les stocker dans un nouveau hachage. Je pense que cette dernière méthode est plus propre et plus claire. Reste à savoir si tu veux stocker les résultats directement sous forme de chaîne de caractère avec le symbole %, ou si tu laisses la mise en forme pour le dernier moment. Je vais appliquer le premier cas, avec deux chiffres après la virgule, grâce à ce bon vieux sprintf.
1 2 3 4 5 6 7
|
my %browser_percent;
foreach $browser (keys %browser_report)
{
# ce bon vieux sprintf : aimez-le, car lui vous aime
$browser_percent{$browser}=sprintf "%.2f %%", $browser_report{$browser}/$total_conn*100;
} |
À noter que sprintf arrondit de façon classique.
EDIT: utiliser map serait peut-être plus élégant.
my %browser_percent = map {$_ => sprintf ("%.2f %%", $browser_report{$_}/$total_conn*100)} keys %browser_report;
Ou pas.
Partager