stewartski,
I was looking through the source code for Net::FTP thinking the || die piece of your code wasn't working because it returned "true but bad" response. When I couldn't find one (it returns undef if there is a problem) I noticed you are calling it in a void context - try this instead.
my $mtime = $ftp->mdtm($file);
die "cannot get mdtm" if ! $mtime;