Avec la fonction alarm, la construction basique est du genre :
#!/usr/bin/perl
use strict;
use warnings;
$|++;
my $timeout = 10;
eval {
local $SIG{ALRM} = sub { die "alarm\n" };
alarm $timeout;
job();
alarm 0;
};
if ($@) {
die unless $@ eq "alarm\n";
print "\nTrop tard !\n";
}
sub job {
print "3 * 6 = ";
while ( <STDIN> != 18 ) {
print "incorrect\n3 * 6 = ";
}
print "ok\n";
}
__END__
Script testé avec Perl 5.14 sous Ubuntu.
Ne fonctionne pas sous Windows (la fonction alarm n'est pas implémentée).
HTH.
--
J-L
http://www.bribes.org/perl