我是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;是否有任何方法来处理此异常/不成功的登录,以便该程序不会终止?
发布于 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登录/;#. };https://stackoverflow.com/questions/37719970
复制相似问题