简体   繁体   English

没有包或对象引用就无法调用方法“文件名”

[英]Can't call method “filename” without a package or object reference

I want to download from a ftp server (host1) a bunch of directories with content. 我想从ftp服务器(host1)下载一堆包含内容的目录。 To do that I use library Net::FTP::Recursive . 为此,我使用库Net :: FTP :: Recursive When I run the code the folders and files were downloaded. 当我运行代码时,文件夹和文件已下载。 Nevertheless, I got this message: 不过,我收到了以下消息:

>Can't call method "filename" without a package or object reference 
 at C:\10_LIB~1\PerlLib\lib\perl5/Net/FTP/Recursive.pm line 86.

I wonder why this happens, what impact it has and how I can avoid this. 我不知道为什么会发生这种情况,产生什么影响以及如何避免这种情况。

Here is the code to download: 这是要下载的代码:

# -- Libraries

# coding and diagnostic
use strict;
use warnings;

# FTP connection
use Net::FTP;
use Net::FTP::Recursive;

# -- Settings

my $host1      = "ftp.host1.com";
my $user1      = "myname\@myweb.com";
my $password1  = "password";

# -- Connection to ftp server

my $f1 = Net::FTP::Recursive->new($host1) or die "Can't open \$f1 $host1\n";
$f1->login($user1, $password1) or die "Can't log \$f1 $user1 in\n";
$f1->cwd() or die "Can't cwd to host folder\n";

# $f1->ascii();
$f1->binary;

# -- Directory to download the contents

my $download = "C:/mydirectory/download";
chdir($download);

# -- Host1

$f1->cwd();
$f1->rget( ParseSub => \&yoursub1 );
$f1->quit;    

sub yoursub1 {
$f1->rget;
}

I used perl on Windows 7 with version: 我在Windows 7版本上使用了perl:

perl -v
This is perl 5, version 28, subversion 0 (v5.28.0) built for MSWin32-x64-multi-thread

And here is the code from /Net/FTP/Recursive.pm until line 86 from the message: 这是来自/Net/FTP/Recursive.pm的代码,直到消息的第86行:

sub _rget {
    my($ftp) = shift;

    my @dirs;

    my @ls = $ftp->dir();

    my @files = $options{ParseSub}->( @ls );

    @files = grep { $_->filename =~ $options{MatchAll} } @files
      if $options{MatchAll};

    @files = grep { $_->filename !~ $options{OmitAll} } @files
      if $options{OmitAll};

    print STDERR join("\n", @ls), "\n"
      if $ftp->debug;

    my $remote_pwd = $ftp->pwd;
    my $local_pwd = Cwd::cwd();

    FILE:
    foreach my $file (@files){
        #used to make sure that if we're deleting the files, we
        #successfully retrieved the file
        my $get_success = 1;
        my $filename = $file->filename();       # <- 86 

yoursub1 is completely wrong. yoursub1是完全错误的。 It's suppose to parse the lines returned from the FTP server (provided as arguments to the sub), and return a list of Net::FTP::Recursive::File objects for each remote file (other than . and .. ). 假定解析从FTP服务器返回的行(作为子参数提供),并为每个远程文件( ...除外)返回Net :: FTP :: Recursive :: File对象的列表。

If the default implementation ( Net::FTP::Recursive::parse_files ) is sufficient, simply remove ParseSub => \\&yoursub1 . 如果默认实现( Net::FTP::Recursive::parse_files )足够,只需删除ParseSub => \\&yoursub1 Otherwise, you should probably start by copying Net::FTP::Recursive::parse_files and adjusting it for your FTP server's output. 否则,您可能应该首先复制Net::FTP::Recursive::parse_files并针对FTP服务器的输出进行调整。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 没有包或对象引用就无法调用方法“文本” - Can't call method “text” without a package or object reference 没有包或对象引用就无法调用方法 - Can't call method without package or object reference Perl:没有包或对象引用,无法调用方法“说” - Perl: Can't call method “say” without a package or object reference Perl:没有包或对象引用就无法调用方法“ catfile” - Perl: Can't call method “catfile” without a package or object reference perl 中的“在没有包或对象引用的情况下无法调用方法“类别”” - "Can't call method "category" without a package or object reference at" in perl 没有包或对象引用就无法调用方法“ import” - Can't call method “import” without a package or object reference 不能在没有包或对象引用的情况下调用方法“try” - Can't call method “try” without a package or object reference 如果没有包或对象引用,则无法调用方法“geometry” - can't call method “geometry” without a package or object reference 为什么得到“没有包或对象引用就无法调用方法” fetchrow_array”? - Why do I get “Can't call method ”fetchrow_array“ without a package or object reference”? Perl:在./redirect第25行没有包或对象引用的情况下,无法调用方法“ put” - Perl: Can't call method “put” without a package or object reference at ./redirect line 25
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM