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

New*_*bie 10 perl

$@$!Perl有什么区别?eval使用相关的错误输出$@.$!也用于捕获错误.那么他们俩之间有什么区别?

Que*_*tin 19

来自perldoc perlvar:

变量$@,$!,$^E,和$?包含关于不同类型的Perl程序的执行过程中可能出现的错误条件信息.变量显示的顺序是报告错误的子系统与Perl进程之间的"距离".它们分别对应于Perl解释器,C库,操作系统或外部程序检测到的错误.


inn*_*naM 5

$! 系统调用失败时设置.

open my $fh, '<', '/foobarbaz' or die $!
Run Code Online (Sandbox Code Playgroud)

这将输出"没有这样的文件或目录".

$@包含传递给的参数die.因此:

eval {
    open my $fh, '<', '/foobarbaz' or die $!
};
if ( $@ ) {
   warn "Caught exception: $@";
}
Run Code Online (Sandbox Code Playgroud)

$@没有使用某种形式的情况下检查eval是没有意义的,检查$!何时没有调用可以在出错的情况下设置它的函数是没有意义的.