Perl $!vs $ @ builtin变量

Ibr*_*ish -3 perl

关于Perl的内置错误指标$的一个微不足道的问题!$ @.它们如何彼此不同,哪种更适合记录目的?

ike*_*ami 5

$!由系统调用错误设置.它对应于C的errno变量.

$@eval EXPR和设定eval BLOCK.它包含捕获的异常.

$?通过设置waitpid,systemclose(关闭与打开的手柄时open '-|'open '|-').它包含有关已终止进程的信息.

大多数模块会在出错时抛出异常,但有些会设置自己的错误变量(例如DBI,Text :: CSV_XS).

记录的相应变量因您记录的内容而异.

例如,system通过$?和报告错误$!.

system(...);
die("Unable to execute child: $!\n")              if $? < 0;
die("Child killed by signal ".( $? & 0x7F )."\n") if $? & 0x7F;
die("Child exited with error ".( $? >> 8 )."\n")  if $? >> 8;
Run Code Online (Sandbox Code Playgroud)