免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4938 | 回复: 12
打印 上一主题 下一主题

perl使用Net::FTP模块的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-08 18:28 |只看该作者 |倒序浏览
    使用这个模块时老是提示“Can't use an undefined value as a symbol reference at C:/Perl/lib/Net/FTP/dataconn.pm line 54.”登录的服务器时windows sever 2003系统,请问该怎么解决?

代码如下:
use Net::FTP;

$ftp = Net::FTP->new
(
"www.trcio.com",
Timeout => 60
) or die "Could not connect.\n";


$username = "read";
$password = "read";

$ftp->login($username,$password) or die "Could not login.\n";

$ftp->cwd('/g');

$remotefile = "use_warnings.txt";
$localfile = "use_wa.txt";

$ftp->get($remotefile,$localfile) or die "Could not put localfilelocalfile\n";

$ftp->quit;
  
哪位大侠帮忙解决下!!!任务所需!!感激感激!!

论坛徽章:
0
2 [报告]
发表于 2012-02-09 10:36 |只看该作者
515572768 发表于 2012-02-08 18:28
使用这个模块时老是提示“Can't use an undefined value as a symbol reference at C:/Perl/lib/Net/FT ...



你在脚本里加上use warnings和use strict就明了。

论坛徽章:
0
3 [报告]
发表于 2012-02-09 10:48 |只看该作者
回复 2# zuerrong

用了 use warnings,但输出的错误信息还是上面那句“Can't use an undefined value as a symbol reference at C:/Perl/lib/Net/FTP/dataconn.pm line 54.”,为什么?同时可以确定是put那句出错的

C:/Perl/lib/Net/FTP/dataconn.pm的部分代码如下:

sub _close {                                                           #48行
  my $data = shift;                                                  #49行
  my $ftp  = ${*$data}{'net_ftp_cmd'};                    #50行
                                                                              #51行
  $data->SUPER::close();                                             #52行
                                                                                #53行
  delete ${*$ftp}{'net_ftp_dataconn'}                         #54行
    if exists ${*$ftp}{'net_ftp_dataconn'}                     #55行
    && $data == ${*$ftp}{'net_ftp_dataconn'};             #56行
}

论坛徽章:
0
4 [报告]
发表于 2012-02-09 10:49 |只看该作者
回复 2# zuerrong


    说错了,可以确定是get那句出错的(未用put)

论坛徽章:
0
5 [报告]
发表于 2012-02-11 18:28 |只看该作者
测试楼主的代码,没有任何问题哦

论坛徽章:
0
6 [报告]
发表于 2012-02-13 10:15 |只看该作者
回复 5# bxg-1982


    不可能吧?我的怎么老是提示

论坛徽章:
0
7 [报告]
发表于 2012-02-13 10:39 |只看该作者
“Can't use an undefined value as a symbol reference at C:/Perl/lib/Net/FTP/dataconn.pm line 54.

sub _close {                                                           #48行
  my $data = shift;                                                  #49行
  my $ftp  = ${*$data}{'net_ftp_cmd'};                    #50行
                                                                              #51行
  $data->SUPER::close();                                             #52行
                                                                                #53行
  delete ${*$ftp}{'net_ftp_dataconn'}                         #54行
    if exists ${*$ftp}{'net_ftp_dataconn'}                     #55行
    && $data == ${*$ftp}{'net_ftp_dataconn'};             #56行
}
不能将一个未定义的值当做符号引用,
也就是说delete ${*$ftp}{'net_ftp_dataconn'}这句话中,${*$ftp}是未定义的,然后第50行中$ftp的由来是${*$data}{'net_ftp_cmd'}

==
写到这里我忽然发现,  delete ${*$ftp}{'net_ftp_dataconn'} if exists ${*$ftp}{'net_ftp_dataconn'} && $data == ${*$ftp}{'net_ftp_dataconn'}; 应该是一行才对,你最好先确认一下你行数的数法是不是对的

论坛徽章:
0
8 [报告]
发表于 2012-02-13 13:44 |只看该作者
回复 7# liu.cy_cu


    sub _close {                                                                                       #48行
  my $data = shift;                                                                                 #49行
  my $ftp  = ${*$data}{'net_ftp_cmd'};                                                  #50行
                                                                              #51行
  $data->SUPER::close();                                                                        #52行
                                                                                #53行
  delete ${*$ftp}{'net_ftp_dataconn'}if exists ${*$ftp}{'net_ftp_dataconn'}&& $data == ${*$ftp}{'net_ftp_dataconn'};             #54行
}
是这样的,大侠,你看下为什么老是提示那个信息

论坛徽章:
0
9 [报告]
发表于 2012-02-16 12:33 |只看该作者
说一下大概的猜想,
出错的部分有可能是因为FTP命令没有正确执行,链接已经销毁,所以传到 _close方法被赋到$data的那个实例的net_ftp_cmd已经没有了,所以$ftp就是未定义的值,所以在
if exists ${*$ftp}{'net_ftp_dataconn'}时,会报错。

请先确认你在运行perl的机器上测试连接你的FTP服务器是否OK

论坛徽章:
0
10 [报告]
发表于 2012-02-16 15:15 |只看该作者
回复 9# liu.cy_cu


    请问Net::FTP模块连接服务器时是采用的被动连接还是主动连接?在我的计算机上面采用被动方式可以登录ftp.cpan.org服务器,但无法登录我们www.trcio.com服务器,同时,无论采用被动登陆还是主动登录服务器使用Net::FTP模块操作ftp.cpan.org服务器时都能成功,不会出现提示错误;但操作我们的服务器都会出现提示错误,如果使用put上传文档的话,可以在我们服务器上面生成相应文档,但文档里面内容为空,该怎么办?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP