首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Perl处理异常

问用Perl处理异常
EN

Stack Overflow用户
提问于 2016-06-09 07:54:15
回答 1查看 593关注 0票数 0

我是perl的新手,我创建了一个用于ftp文件传输的perl脚本。

但是,如果$ftp->login不成功,程序将以下列错误消息终止:

代码语言:javascript
复制
Uncaught exception from user code:
        Cannot login Login incorrect.
 at ftp.sender.com line 89

程序的代码片段:

代码语言:javascript
复制
$ftp->login($config->[$i]->{'USERNAME'},$config->[$i]->{'PSWD'}) or die "Cannot login ", $ftp->message;

是否有任何方法来处理此异常/不成功的登录,以便该程序不会终止?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-09 09:40:18

只有在登录有效的情况下,您才有几种不同的方法来做事情。

  • 让整个程序die 你已经知道了。如果登录失败,整个程序将停止。这是因为login在成功时返回一个真值,在失败时返回一个假值。因此,如果undef返回,则调用or的RHS,即die。 $ftp->登录($user,$pw)或死“不能登录",$ftp->消息;
  • 使用do块 如果要坚持使用or,可以使用do { ... }块对多个语句进行分组。这太奇怪了。 $ftp->登录($user,$pw)或做{ stuff();more_stuff();};
  • 检查login的返回值 如果将login放入if中,则可以调用任意数量的代码。 如果( $ftp->login($user,$pw) ){$pw();more_stuff();}
  • 将所有这些都放在一个子中,然后让login返回 将所有FTP内容分组到一个子中,并调用它。如果其中一个步骤失败,则从子程序返回。要获得错误消息,可以返回ftp对象并检查外部的最终成功。 子ftp_stuff { my ($foo) = @_;$ftp ->登录($user,$pw)或返回$ftp;$ftp->$pw($foo)或返回$ftp;返回$ftp;}#以及其他某个地方-- my $ftp= ftp_stuff($bar);死掉“出了问题:",$ftp->消息,如果$ftp->消息;
  • 使用die或异常和尝试::微型 nices的方法是使用Try::Tiny。 使用Try::Tiny;尝试{$ftp->登录($user,$pw)或死“不能登录",$ftp->消息;$pw()或死”东西",$ftp->消息;#.}在$_警告中捕获{#异常/错误“无法登录”,如果/Cannot登录/;#. };#继续您的程序 尝试的另一种选择::Tiny是区块。 eval {$ftp->登录($user,$pw)或死“不能登录",$ftp->消息;$pw()或死消息,$ftp->消息;#. };如果( $@ ) {异常/错误在$@警告中”无法登录",如果$@ =~ /Cannot登录/;#. };
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37719970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档