Perl中$@
和$!
之间有什么区别?与eval
相关联的错误使用$@
输出。 $!
也用于捕获错误。那么两者之间有什么区别?
答案 0 :(得分:18)
变量
$@
,$!
,$^E
和$?
包含有关在执行Perl程序期间可能出现的不同类型的错误情况的信息。变量显示的顺序是报告错误的子系统与Perl进程之间的“距离”。它们分别对应于Perl解释器,C库,操作系统或外部程序检测到的错误。
答案 1 :(得分:5)
$!
。
open my $fh, '<', '/foobarbaz' or die $!
这将输出“没有这样的文件或目录”。
$@
包含传递给die
的参数。因此:
eval {
open my $fh, '<', '/foobarbaz' or die $!
};
if ( $@ ) {
warn "Caught exception: $@";
}
在不使用某种形式的$@
的情况下检查eval
是没有意义的,如果您没有调用可以在$!
调用的函数,则检查{{1}}是没有意义的。出现错误。
答案 2 :(得分:0)
基于perl_doc
$!; show C library\'s errno
$@; show compile error