如何重写此eval块

est*_*est 2 perl

这段代码闻起来......我该如何更好地重写它?

my $record;

eval {
    while (
        # undef $record here, so if getRecord() failed, nothing will be written
        # in the reject file
        do { undef $record; defined( $record = $dataFile->getRecord ) }
    ) {
        $LT_DataFile->encode($record);
    } 
    1;
};

if ( my $error = $@ ) {
    $rejectFile->writeRecord( $error, $record );
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

dax*_*xim 8

在catch部分中不需要变量,因为当执行到达时,其内容将始终存在undef.用文字值替换它可以限制$record到更小的范围.

use Try::Tiny;
try {
    while (defined(my $record = $dataFile->getRecord)) {
        $LT_DataFile->encode($record);
    }
} catch {
    $rejectFile->writeRecord($_, undef);    # T::T puts error in $_
}
Run Code Online (Sandbox Code Playgroud)

  • 如果出现错误,为什么你说'$ record`总是'undef`?据推测,`encode`方法能够抛出错误,在这种情况下,`$ record`将是导致编码错误的记录.如果`getRecord`是失败的方法,它只是`undef`. (4认同)