如何解决如何对“没有这样的文件或目录”错误采取措施
我创建了脚本,该脚本应该删除Perl中的文件和/或文件夹。 我正在使用以下命令进行处理:
my $command = "find ". $folderName." -type f ".$mtimeOption." -exec rm '{}' \\;";
execLinuxCommand($command);
ExecLinuxCommand
将错误添加到@errors
中。
my ($stdout,$stderr) = capture {
system ($command);
};
if ($stderr) {
$stderr =~ s/\s+$//;
$ic->log(domain=>"lifecycle",level=>"error",message=>"ERROR: $stderr",evalcontext=>$ic);
push @errors,{ command => $command,error => $stderr,level=> "ERROR" };
}
然后有processCommandsErrors
sub processCommandsErrors {
my ($ic) = @_;
if (@errors) {
my $errorMessage = "There were " . ($#errors + 1) . " errors during cleanup task:\n";
for my $i ( 0 .. $#errors ) {
$errorMessage .= ($i + 1) . ". $errors[$i]{level}:\n";
$errorMessage .= "\tCommand: $errors[$i]{command}\n";
$errorMessage .= "\tError: $errors[$i]{error}\n";
}
die($errorMessage);
}
}
我想做的是在除No such file or directory
错误之外的其他任何错误上死亡。对于此错误,我只想记录该文件/文件夹不存在。
现在的问题是:在'processCommandsErrors'中捕获No such file or directory
错误的方法是否比以下更优雅:
$errors[$i]{error} == 'No such file or directory'
解决方法
$errors[$i]{error} == 'No such file or directory'
这实际上不起作用。它将发出警告。字符串比较需要eq
,而不是==
。您可能还是想要模式匹配,因为消息可能包含更多信息或换行符。
如this URL中所述,您可以改为选中errno
:
errno -ls
...
ENOENT 2 No such file or directory
...
这看起来比检查整个字符串还要优雅。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。