$!由系统调用错误设置.它对应于C的errno变量.
$@由eval EXPR和设定eval BLOCK.它包含捕获的异常.
$?通过设置waitpid,system和close(关闭与打开的手柄时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)