我想要查询的操作的结果的净:: 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;

这假定将函数并不总是返回民主基金成功。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top