我是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;
有没有办法处理此异常/不成功登录,以便该程序不会终止?
答案 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