$ @和$之间的区别!在perl

时间:2013-07-17 10:00:18

标签: perl

Perl中$@$!之间有什么区别?与eval相关联的错误使用$@输出。 $!也用于捕获错误。那么两者之间有什么区别?

3 个答案:

答案 0 :(得分:18)

来自perldoc perlvar

  

变量$@$!$^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