my $retrieval = undef; my $timeout = 120; eval { local $SIG{'ALRM'} = sub { die 'timeout' }; alarm $timeout; $retrieval = $ftp->get($remote_file, $local_file); alarm 0; }; if ($@) { if ($@ =~ /timeout/) { } }