perl - Perl-自定义错误输出

标签 perl error-handling

我需要知道如何在Perl中自定义错误。例如,下面是一些代码:

my $filename = 'filaname1.exe';
print "Copying $filename";
copy("$dir_root\\$filename", "$spcl_dir\\$filename");
if ($? == "0") {
    print " - Success!\n";
}
else { print " - Failure!\n"; }

我尝试编写此代码并“捕获”错误,并在没有得到退出代码0时显示“失败”,并在出现错误时显示“成功”。我需要知道如何自定义它。我真的不想使用die或类似的东西,它会给最终用户带来一些神秘的错误。

谢谢!

最佳答案

您需要阅读$上的文档吗?在perlvar中。该值为:

The status returned by the last pipe close, backtick ("``") command, successful call to wait() or waitpid(), or from the system() operator.



您对复制的调用(大概是从File::Copy进行的)与这些类别都不远,因此$?没有设置。

但是,如果您阅读File::Copy的文档,则会看到其功能全部为“成功返回1,失败返回0”。因此,您可以简化很多代码。
#!/usr/bin/perl

use strict; use warnings;

use File::Copy;

if (copy('notthere', 'somewhere else')) {
  warn "success\n";
} else {
  warn "failure: $!\n";
}

请注意,我使用“警告”而不是“打印”,以便将错误归结到STDERR。注意,还要使用$!显示操作系统错误。当然,如果不够用户友好,可以将其省略。

关于perl - Perl-自定义错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4278552/

相关文章:

perl - 如何处理包含多种编码的文件?

perl - 具有可读子例程参数的堆栈跟踪

java - 我的Java版本是最新版本,但我的JVM仍然是1.5?

java - 我没有收到我打算进行第二次 Activity 时传递的字符串

python - 继续收到太多无法插入数组的索引

perl - 在 perldoc 中使撇号正确呈现

perl - 匿名哈希片-语法?

perl - 为什么 STDOUT 行打印在 STDERR 行之后?

angular - 运行 Angular 项目时出错

error-handling - 从SSIS包中抛出错误