首页 > 解决方案 > Perl - Net::SFTP::Foreign

问题描述

我正在尝试使用 Net::SFTP::Foreign 在 Perl 中编写上传脚本。

我在检查目录是否存在时遇到问题,如果不存在,则创建它。

如果目录不存在,Net::SFTP::Foreign 似乎只是错误并关闭连接,并且从不运行“else”

您可以看到下面的代码,任何人都可以看到我哪里出错了吗?

sub uploadtoftp
{
use Net::SFTP::Foreign;
use File::Basename;
use warnings;

  my $host=$_[0];
  my $user=$_[1];
  my $pw=$_[2];


   my $home_directory ="/home/testuser";
  my $remote_path=$home_directory."/".$name."/".$destination_dir;



  if (my $ftp = Net::SFTP::Foreign->new($host,
                                   user => $user,
                                   password => $pw,
                                   autodie => 0))
  {

      my $destination_dir_proceed=0;


        $ftp->find("$remote_path", on_error => sub { print "Creating directory\n"; $ftp->mkdir("$remote_path")  });
        print $ftp->error;


        if($ftp->opendir($remote_path)) 
        {
          $destination_dir_proceed=1;
        }


        if($destination_dir_proceed==1) 
        {
        # --- loop through file list and upload all new files
        foreach $filename (split(/ /, $file_list)) 
        {
          $ftp->put($filename,$remote_path.$filename);

        }


        }

      else
      {
        print "cannot reach directory $remote_path\n";
      }


  }




} # end subroutine uploadtoftp()

标签: perl

解决方案


当您实例化 Net::SFTP::Foreign 对象时,您使用autodie => 1.

Autodie将“自动将不可恢复的错误提升为执行”。

只要您在整个脚本中定期检查状态,您就可以删除 autodie 行并没问题。

如果有想死的地方,可以在发出请求后使用die_on_error


推荐阅读