0
my ( $addr, $usr, $pwd, $ascii, $active, $timeout ) = @_;
  my $ftp;

  # Set up new FTP with active mode and user-specified timeout...
  if ( $active and $timeout )
  {
    $ftp = Net::FTP -> new ( $addr, Passive => 0, Timeout => $timeout )
         or die "Failed to connect to FTP (w/ active, timeout): $addr";
  }


  # Login to new FTP
  $ftp -> login ( $usr, $pwd )
       or die "Failed to login to FTP: " . $ftp->message;

  # Set ASCII or binary transfer modes
  if ( $ascii ) { $ftp -> ascii();  }
  else          { $ftp -> binary(); }

  print "LOGIN: $addr\n";
  return $ftp;
}

有人可以解释上面在做什么吗?它登录到ftp,然后返回它?它实际上返回了什么?这是上传还是下载?

4

3 回答 3

4

它返回一个Net::FTP类的对象(这样,FTP 连接已经建立,并且您的调用者代码可以根据需要使用该对象来上传/下载文件,而无需登录/连接)。

要了解如何使用Net::FTP对象,请参阅其文档中的示例$ftp->put(),通常$ftp->get()是上传/下载文件。

于 2013-07-27T22:28:13.653 回答
1

它不会启动任何文件传输。它只是返回一个可用于发出请求的对象。当它返回时,FTP 连接建立并完成认证,服务器正在等待下一个命令。

于 2013-07-27T22:28:38.693 回答
0

你可以做几件事:

  1. 使用Data::Dumper转储您感兴趣的变量。您将看到这$ftp是对包含许多不同条目的哈希的引用。
  2. 阅读Perl ReferencesPerl Object Oriented Programming。您似乎并不熟悉引用的概念,这并不罕见。许多 Perl 初学者书籍都没有详细介绍它们,许多自学 Perl 专家也不了解它们。

通读这两个教程将解释你需要知道的一切。我可以尝试直接回答您的问题,但我最终会重复这些教程,并且可能做得不太好。

在您的 return 语句之前使用该Data::Dumper模块转储$ftp,您会更好地了解它的真实外观。然后阅读教程。

于 2013-07-28T02:21:34.033 回答