这段代码闻起来......我该如何更好地重写它?
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)
谢谢.
在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)