use strict; use LWP::UserAgent; use HTML::LinkExtor; use URI::URL qw(url); my $url = "http://kernel.org/pub/linux/kernel/v1.0/"; my $ua = LWP::UserAgent->new; $ua->agent('pps 0.1.43'); my @links = (); sub callback { my ($tag, %attr) = @_; return if $tag eq 'href'; push(@links, values %attr); return (@links); } my $p = HTML::LinkExtor->new(\&callback); my $res = $ua->request( HTTP::Request->new(GET => $url), sub {$p->parse($_[0])}); my $base = $res->base; @links = map {$_ = url($_, $base)->abs;} @links; my @krn = grep(/tar/, @links); foreach my $krn (@krn) { my @remote_files = HTTP::Request->new(HEAD=>$krn); my $resp = $ua->request(@remote_files); my $length = $resp->header('Content-Length'); my $bprecise = sprintf "%.0f", $length; my $bsize = insert_commas($bprecise); my $kprecise = sprintf "%.0f", ($length/1024); my $ksize = insert_commas($kprecise); my $archtype; # tarball? or bzip2? or zip? my $krnhref = substr($krn, 48, 70); if ($krn =~ /tar.gz/) { $archtype = "tarball"; } elsif ($krn =~ /bz2/) { $archtype = "bzip"; } else { $archtype = "zip"; } print "Path: $krn\nFile: $krnhref "; print "($archtype) - ${ksize}kb, $bsize bytes\n\n"; } sub insert_commas { my $text = reverse $_[0]; $text =~ s/(\d{3})(?=\d)(?!\d*\.)/$1,/g; return scalar reverse $text; }