Perl 如何检查'File::Path::remove_tree'是否失败?

Perl 如何检查'File::Path::remove_tree'是否失败?,perl,error-handling,Perl,Error Handling,我习惯于。。。或者死“.失败…$!” 我惊讶地发现,为了知道File::Path::remove_tree是否失败,我必须这样做: remove_tree( 'foo/bar', 'bar/rat', {error => \my $err} ); if (@$err) { die "error..." } 我错过什么了吗?真的是这样吗 对我来说,许多不需要的代码…remove\u tree返回成功删除的文件数,因此它需要另一种报告错误的方法,而不是返回值。请记住,在遇到错误之前,可能已

我习惯于。。。或者死“.失败…$!”

我惊讶地发现,为了知道
File::Path::remove_tree
是否失败,我必须这样做:

remove_tree( 'foo/bar', 'bar/rat', {error => \my $err} );
if (@$err) {
 die "error..."
}
我错过什么了吗?真的是这样吗


对我来说,许多不需要的代码…

remove\u tree
返回成功删除的文件数,因此它需要另一种报告错误的方法,而不是返回值。请记住,在遇到错误之前,可能已经删除了许多文件,因此不能依赖返回值0来指示错误

这是否是报告错误的方式是一个品味问题。从文档本身来看:

注: 以下错误处理机制被认为是实验性的,可能会更改>等待用户的反馈


remove_tree
返回成功删除的文件数,因此它需要另一种报告错误的方法,而不是返回值。请记住,在遇到错误之前,可能已经删除了许多文件,因此不能依赖返回值0来指示错误

这是否是报告错误的方式是一个品味问题。从文档本身来看:

注: 以下错误处理机制被认为是实验性的,可能会更改>等待用户的反馈


我一次删除一条路径,然后检查它是否仍然存在:

 foreach my $path ( @paths ) {
      my $rc = remove_tree( $path, { ... } );
      die ... if -e $path;
      }

因为,您不能信任返回值。

我一次删除一个路径,然后检查它是否仍然存在:

 foreach my $path ( @paths ) {
      my $rc = remove_tree( $path, { ... } );
      die ... if -e $path;
      }
因为,您不能信任返回值。

说它引发异常:

如果make_path或remove_tree遇到错误,诊断消息将通过carp(非致命错误)或croak(致命错误)打印到STDERR

这使我们能够至少对标记为致命的错误使用标准异常处理

use Try::Tiny;
try {
    … remove_tree …
} catch {
    warn "remove_tree failed: $_";
};
这些警告也可能会以某种方式被命运化,但我现在除了将
文件::路径::_carp
化名为
文件::路径::_croak
表示它引发了异常:

如果make_path或remove_tree遇到错误,诊断消息将通过carp(非致命错误)或croak(致命错误)打印到STDERR

这使我们能够至少对标记为致命的错误使用标准异常处理

use Try::Tiny;
try {
    … remove_tree …
} catch {
    warn "remove_tree failed: $_";
};

这些警告也可能是命中注定的,但我现在除了给
File::Path::\u carp
to
File::Path::\u croak

换言之,“如果你有更好的主意,我洗耳恭听!”换言之,“如果你有更好的主意,我洗耳恭听!”+1是的,我知道返回值在这里是不相关的。我只是想知道失败测试如此“苛刻”是不是很常见。当我处理系统时,我就是这么做的。这并不是那么苛刻。+1是的,我知道返回值在这里是不相关的。我只是想知道失败测试如此“苛刻”是不是很常见。当我处理系统时,我就是这么做的。没那么苛刻。