#!/usr/bin/perl use warnings; use strict; use IO::Socket; sub last_release { my $sock = new IO::Socket::INET ( PeerAddr => 'linux-france.org', PeerPort => '80', Proto => 'tcp'); return('unknown') if not $sock; print $sock "GET /prj/imapsync/VERSION HTTP/1.0\n", "Host: www.linux-france.org\n\n"; my @line = <$sock>; close($sock); my $last_release = $line[-1]; chomp($last_release); return($last_release); } sub not_long { my ($func) = @_; my $val; eval { local $SIG{ALRM} = sub { die "alarm\n" }; alarm 3; #print $func, "\n"; { no strict "refs"; $val = &$func(); } alarm 0; }; if ($@) { # timed out return('unknown') unless $@ eq "alarm\n"; # propagate unexpected errors }else { # didn't return($val); } } print last_release(), "\n"; print not_long('last_release'), "\n";