#!/usr/bin/perl
use strict;
use warnings;
my $logfile = shift or die "Usage: $0 <logfile to parse>\n";
open (my $fh, "<", $logfile) or die "Cannot open $logfile: $!\n";
# Total number of events that were logged
my $total_events = 0;
# Container to hold frequencies of each event
my %data;
# Human-readable event names
my %events = (
'0' => 'Grass', '1' => 'Bush', '2' => 'Tree', '3' => 'Hut',
'b' => 'Bear', 'n' => 'Ninja', 'x' => 'Bot', 'c' => 'Crystal'
);
# Read log file
while (my $contents = <$fh>) {
# Ignore endline formatting
chomp($contents);
my @characters = split //, $contents;
# Update total event count
$total_events += scalar @characters;
# Update event frequencies
foreach (@characters) {
if (exists $data{$_}) {
$data{$_}++;
} else {
$data{$_} = 1;
}
}
}
# Spit out results
while (my ($event, $frequency) = each(%data)) {
my $percentage = sprintf "%.3f", $frequency / $total_events * 100;
print "$events{$event} occurred $frequency times ($percentage%)\n";
}
print "$total_events events logged.\n";