gpt4 book ai didi

perl - 如何使用 block 作为 'or' 子句而不是简单的骰子?

转载 作者:行者123 更新时间:2023-12-03 21:13:23 27 4
gpt4 key购买 nike

我想检查 Net::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 在调用函数中。
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" );

}

关于perl - 如何使用 block 作为 'or' 子句而不是简单的骰子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/666996/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com