处理Perl中的异常

时间:2016-06-09 07:54:16

标签: perl ftp

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

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

Uncaught exception from user code:
        Cannot login Login incorrect.
 at ftp.sender.com line 89

程序中的代码片段:

$ftp->login($config->[$i]->{'USERNAME'},$config->[$i]->{'PSWD'}) or die "Cannot login ", $ftp->message;

有没有办法处理此异常/不成功登录,以便该程序不会终止?

1 个答案:

答案 0 :(得分:2)

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

  • 让整个程序function the_theme_redux_filters($url) { $relativeURL = str_replace(array('http://','https://'), '//', $url); return $relativeURL; } add_filter( 'redux/validate/front-background/class/{field.validate}', '', 10, 1 );

    你已经知道了。如果登录失败,整个程序将停止。它起作用是因为die在成功时返回true值,在失败时返回false值。因此,如果login得到回归,则调用undef的RHS,即or

    die
  • 使用$ftp->login($user, $pw) or die "Cannot login ", $ftp->message;

    如果您想坚持do,可以使用or块对多个语句进行分组。这很奇怪。

    do { ... }
  • 检查$ftp->login($user, $pw) or do { stuff(); more_stuff(); };

    的返回值

    如果您将login放在login中,则可以根据需要调用尽可能多的代码。

    if
  • 将所有内容放入子文件中,让if ( $ftp->login($user, $pw) ) { stuff(); more_stuff(); } 返回

    将所有FTP内容分组到一个子组中并调用它。如果其中一个步骤失败,则从子返回。要获取错误消息,您可以返回login对象并检查外部的最终成功。

    ftp
  • 使用sub ftp_stuff { my ($foo) = @_; $ftp->login($user, $pw) or return $ftp; $ftp->stuff($foo) or return $ftp; return $ftp; } # and somewhere else my $ftp = ftp_stuff($bar); die "Something went wrong: ", $ftp->message if $ftp->message; 或例外情况和Try::Tiny

    nices方法是使用Try :: Tiny。

    die

    Try :: Tiny的替代方案是an eval block

    use Try::Tiny;
    
    try {
        $ftp->login($user, $pw) or die "Cannot login ", $ftp->message;
        stuff() or die "stuff ", $ftp->message;
        # ...
    } catch {
        # exception/error is in $_
        warn "Could not log in" if /Cannot login/;
        # ...
    };
    
    # continue with your program