Chinaunix首页 | 论坛 | 博客
  • 博客访问: 476068
  • 博文数量: 104
  • 博客积分: 3455
  • 博客等级: 中校
  • 技术积分: 1216
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-18 18:33
文章分类

全部博文(104)

文章存档

2015年(3)

2014年(1)

2013年(7)

2012年(8)

2011年(11)

2010年(18)

2009年(56)

我的朋友

分类:

2010-01-10 18:18:42

Perl中汇报错误的特殊变量
变量 英文名 描述
$! $ERROR and $OS_ERROR
操作系统或者库函数调用的错误
$? $CHILD_ERROR 最近一次调用wait()得到的返回值
$@ $EVAL_ERROR 最近一次调用eval()得到的错误
$^E $EXTENDED_OS_ERROR 操作系统特有的错误信息

$!
Perl解析器是一个C程序,他的很多工作都是通过C语言的函数库来完成的.$!保存的就是调用底层C函数的返回值.返回值的等义在头文件 errno.h 中,文件中把符号常量和错误值关联起来.
库函数调用失败会设置$!,调用成功不会修改$!,也不会重置,而是保持上一次的值.所以不能用$!来判断调用是否成功.

$?
在上一次管道关闭,反引号命令,wait,waitpid,system函数调用返回的状态.实质是底层的wait(2)和waitpid(2)系统调用所返回的16位状态.
这个退出状态不同于返回值.它由2个字节组成.高字节为子程序的返回值,低7位存使程序终止的信号代码,如果造成了内核转转储,低字节的第8位将被设为1.
当程序使用exit函数时,exit的参数将被作为进程的返回值.如果是其他程序调用,该返回值变为$?的高字节.
if ($? == -1) {
    print "failed to execute: $!\n";
}
elsif ($? & 127) {
       printf "child died with signal %d, %s coredump\n",($? & 127), ($? & 128) ? 'with' : 'without';
}
else {
       printf "child exited with value %d\n", $? >> 8;
 }

注: $? 为 -1 表示执行子进程失败.如 system 执行一个不存在的命令,$?就将返回 -1.


$@
保存上一次eval捕获的错误信息.
在每次执行eval语句时,就会重置$@为undef.所以在eval调用后即可通过$@的值判断是否产生错误.
注意和$!的区别:$!在失败时才会修改,而$@在每次执行eval前就会重置为undef.

$^E
通常情况下,标准的Perl中,$^E和$!是一样的.在windows,OS/2,VMS或Macperl上可能会得到额外的信息.

阅读(3384) | 评论(0) | 转发(0) |
0

上一篇:元旦前夕

下一篇:Man

给主人留下些什么吧!~~