#!/usr/bin/perl use strict; use warnings; use LWP::Simple qw /$ua get getprint/; my @years = (2000 .. 2004); my @months = qw /January/; my @langs = qw /Perl Python Java C C++ Ruby PHP Cobol BASIC FORTRAN Forth UNIX Lisp Scheme Haskell shell .NET Pascal Ada Eiffel/; my %info; $ua -> proxy (http => "http://XXXX:XXXX/"); $ua -> agent ("Mozilla/8.0"); foreach my $lang (@langs) { my $l = $lang; $l =~ s/(\W)/sprintf "%%%02x" => ord $1/eg; foreach my $year (@years) { foreach my $month (@months) { sleep 2; my $query = lc "q=$l+programming+%22$month+$year%22"; my $url = "http://www.google.nl/search?$query&hl=en"; my $text = get ($url) or do { warn "Failed to get $lang/$month/$year\n"; next; }; print STDERR "."; unless ($text =~ m!Results \s+ \d+\s*-\s*\d+ \s+ of \s+ about \s+ ([\d,]+)!x) { warn "Failed to parse $lang/$month/$year\n"; next; } my $count = $1; $count =~ s/,//g; $info {$lang} {$year} {$month} [0] = $count; $info {$lang} {$year} {$month} [1] = $info {$lang} {$years [0]} {$months [0]} [0] ? 100 * $info {$lang} {$year} {$month} [0] / $info {$lang} {$years [0]} {$months [0]} [0] : -1; } } print STDERR "\n"; } print " " x 9; foreach my $year (@years) { foreach my $month (@months) { printf " %3s %4d " => substr ($month, 0, 3), $year } } print "\n"; foreach my $lang (sort {$info {$b} {$years [-1]} {$months [-1]} [1] <=> $info {$a} {$years [-1]} {$months [-1]} [1]} @langs) { printf "%7s ", $lang; foreach my $year (@years) { my $w = $year >= 2004 ? 4 : 3; foreach my $month (@months) { printf "%7d (%${w}d)" => @{$info {$lang} {$year} {$month}}; } } print "\n"; } __END__