-
oracle_11g_r2_rac+asm在windows_server_2008_r2_x64环境下的错误处理及搭建配置指南
资源介绍
18.4 错误处理
在很多情况下,系统调用可能会失败;例如,尝试打开不存在的文件,或者删除某个仍含有文件
的目录,或者尝试读取没有读权限的文件。在前面的示例中,我们已经用到了 die 函数,本节将详细
讨论有关错误处理和错误处理函数的相关内容。这些函数包括 die 函数、warn 函数和 eval 函数。
・ die 函数用于在命令或文件句柄失败时退出 Perl 脚本。
・ warn 函数类似于 die 函数,但它不会退出脚本。
・ eval 函数具有多种用途,但它主要还是用于异常处理。
读者想必还记得短路运算符 && 和 ||,这两个运算符首先会求其左侧操作数的值,然后才会求
其右侧操作数的值。如果 && 左侧操作数值为 true,则求其右侧的操作数。如果 || 左侧操作数的值
为 false,这才求其右侧的操作数。
Carp.pm 模块。有很多种退出脚本的途径可供用户选择。Perl 5 提供的 Carp 模块扩展了 die 和
warn 的功能。(详见示例 12.10。)
18.4.1 die 函数
如果系统调用失败的话,die 函数会把字符串打印到 STDERR 上,并以 $! 的当前值退出脚本。
$! 变量中含有 errno 的当前值,后者是一个 UNIX 全局变量,含有一个表示系统错误的数字。只有
在系统调用失败时才会更新 errno 的值。当系统调用失败时,会向 errno 赋予一个数字代码,以表
明错误的类型。如果在字符串中省略了换行符,则会打印出带有行号的消息(参见 /usr/include/sys
中的完整列表)。
下面是 /usr/include/sys/errno.h 文件中的示例:
#define EPERM 1 /* Not owner */
#define ENOENT 2 /* No such file or directory */
#define ESRCH 3 /* No such process */
#define EINTR 4 /* Interrupted system call */
#define EIO 5 /* I/O error */
...
Win32 的错误代码不同于 UNIX 错误代码,因此不能依赖于 $! 返回的值。有很多 Win32 扩展
都提供了自己的错误函数,以便为用户提供更有意义的结果。详情可参阅 ActiveState 中标准 Perl
库里的 Win32::GetLastError 相关文档。