如何使用一个块作为“或”条款,而不是一个简单的芯片?
-
21-08-2019 - |
题
我想要查询的操作的结果的净:: FTP的Perl模块中而不是死亡。
通常你会怎么做:
$ftp->put($my_file)
or die "Couldn't upload file";
但我想做些别的事情,而不是仅仅在死亡这个剧本,所以我尝试:
$ftp->put($my_file)
or {
log("Couldn't upload $my_file");
return(-1);
}
log("$my_file uploaded");
但编译错误的Perl的抱怨说:
syntax error at toto.pl line nnn, near "log"
这是第二日志在我的代码片段。
任何建议不胜感激。
欢呼声,
解决方案
的 do
的是你在找什么:
$ftp->put($my_file)
or do {
log("Couldn't upload $my_file");
return(-1);
};
log("$my_file uploaded");
不过的这个的可能是更好的方式:
unless( $ftp->put( $my_file )) { # OR if ( !$ftp->put...
log("Couldn't upload $my_file");
return(-1);
}
如果你只是想返回错误条件,那么你就可以 die
和使用 eval
在调用FUNC。
use English qw<$EVAL_ERROR>; # Thus, $@ <-> $EVAL_ERROR
eval {
put_a_file( $ftp, $file_name );
handle_file_put();
};
if ( $EVAL_ERROR ) {
log( $EVAL_ERROR );
handle_file_not_put();
}
和再调用
sub put_a_file {
my ( $ftp, $my_file ) = @_;
$ftp->put( $my_file ) or die "Couldn't upload $my_file!";
log( "$my_file uploaded" );
}
其他提示
或做{};总是让我头疼。是否有一个很好的理由使用“或”语法(这点我承认使用很多关于一个衬垫)对“如果”(我更喜欢多套)?
那么,有没有理由使用或不使用这些方法中的一个在另一个的偏好?
foo()
or do {
log($error);
return($error);
};
log($success);
if (!foo()) {
log($error);
return($error);
}
log($success);
使用做强>
这里是小的代码片断:
sub test {
my $val = shift;
if($val != 2) {
return undef;
}
return 1;
}
test(3) || do {
print "another value was sent";
};
我有一个很难理解为什么这需要在做的是包裹起来。是否有一个原因,这是不是足够?
my $ftp_ok = $ftp->put( $my_file )
or log("Couldn't upload $my_file" ) and return -1;
log("$my_file uploaded") if $ftp_ok;
这假定将函数并不总是返回民主基金成功。
不隶属于 StackOverflow