6.16. Solution: Analyze Apache - number of successful hits

Example 6-12. examples/files/apache_log_result_code.pl

#!/usr/bin/perl
use strict;
use warnings;

my $file = "examples/files/apache_access.log";
open my $fh, '<', $file or die "Could not open '$file': $!";


my $good = 0;
my $bad  = 0;
my $ugly = 0;
while (my $line = <$fh>) {
    chomp $line;
    my $request = q( HTTP/1.1" );
    my $start_request = index ($line, $request);
    my $result;
    if ($start_request >= 0) {
        my $end_request = index($line, " ", $start_request + length($request));
        $result = substr($line, $start_request + length($request), $end_request-$start_request - length($request));
        #print "$start_request, $end_request '$result'\n";
    } else {
        my $request = q( HTTP/1.0" );
        my $start_request = index ($line, $request);
        if ($start_request >= 0) {
            my $end_request = index($line, " ", $start_request + length($request));
            $result = substr($line, $start_request + length($request), $end_request-$start_request - length($request));
            #print "$start_request, $end_request '$result'\n";
        } else {
            #print "ERROR: Unrecognized Line: $line\n";
        }
    }
    if (defined $result) {
        if ($result eq "200") {
            $good++;
        } else {
            $bad++;
        }
    } else {
        $ugly++;
    }

}

print "Good: $good\n";
print "Bad:  $bad\n";
print "Ugly: $ugly\n";


# Disclaimer: this is not an optimal solution.
# We will see a much better one after learning functions, regular expressions