evalブロックでdieを捕捉するなり何なり

eval { # try
 $SIG{ALARM} = sub {
  ...
  die "FTP TIMEOUT..."; # throw
 };
 alarm($timeout);
};
if ($@) {
 # catch(timeout)
}