【发布时间】:2013-07-17 10:00:17
【问题描述】:
Perl 中的$@ 和$! 有什么区别?与 eval 相关的错误使用 $@ 输出。 $! 也用于捕获错误。那么两者有什么区别呢?
【问题讨论】:
标签: perl
Perl 中的$@ 和$! 有什么区别?与 eval 相关的错误使用 $@ 输出。 $! 也用于捕获错误。那么两者有什么区别呢?
【问题讨论】:
标签: perl
变量
$@、$!、$^E和$?包含有关在执行 Perl 程序期间可能出现的不同类型错误条件的信息。这些变量按报告错误的子系统与 Perl 进程之间的“距离”排序。它们分别对应于 Perl 解释器、C 库、操作系统或外部程序检测到的错误。
【讨论】:
$! 在系统调用失败时设置。
open my $fh, '<', '/foobarbaz' or die $!
这将输出“没有这样的文件或目录”。
$@ 包含传递给die 的参数。因此:
eval {
open my $fh, '<', '/foobarbaz' or die $!
};
if ( $@ ) {
warn "Caught exception: $@";
}
如果不使用某种形式的eval,检查$@ 是没有意义的,当你没有调用可以在错误情况下设置它的函数时,检查$! 是没有意义的。
【讨论】:
基于perl_doc
$!; show C library\'s errno
$@; show compile error
【讨论】: