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