perl函数说明(die)

die
   die LIST
   die

在 eval 之外,这个函数把 LIST 里的数值连接起来打印到 STDERR 并且带着当前的 $!(C 库的 errno 变量)的值退出。如果 $! 为 0,它就带着 $?>>8 值(这个值是从 system,wait,管道 close,或者 `commend` 退出的最后一个子进程的状态)退出。如果 $?>>8 为 0 ,那么该函数带着 255 退出。

在一个 eval 里面,该函数把 $@ 变量设置为将要生成的错误信息,然后退出 eval,而 eval 返回 undef。因此 die 函数可以用于抛出命名例外,而这个命名例外可以在程序的更高层捕获。参阅本章稍后的 eval。

如果 LIST 是一个单对象引用,那么就假设该对象是一个例外对象,并且象在 $@ 里的例外那样毫不修改地返回。

如果 LIST 为空并且 $@ 已经包含一个字串值(通常是来自前面一次 eval),那么就在该字串后面附加“\t ...propagated”再次使用。这样做有益于传播(抛出)例外:

   eval { ... };
   die unless $@ =~ /Expected exception/;

如果 LIST 为空并且 $@ 已经包含一个例外对象,则调用 $@->PROPAGATE 方法来判断该例外应该如何传播。

如果 LIST 为空并且 $@ 也为空,那么使用字串“Died”。

如果 LIST 的最后一个值不是以换行符结尾(而且你不是在传递一个例外对象),则在该信息后面附加当前脚本文件名,行号,以及输入行数(如果有),然后再附加一个换行符。提示:有时候在你的信息上附加", stopped" 会令它更有意义,因为后面会附加 "at scriptname line 123" 这样的东西。假设你正在运行一个叫 canasta 的脚本;看看下面两种退出方法的区别:

   die "/usr/games is no good";
   die "/usr/games is no good, stopped";

它们分别输出:

   /usr/games is no good at canasta line 123.
   /usr/games is no good, stopped at canasta line 123.

如果你希望自己的错误信息报告文件名和行数,使用特殊标记 _ FILE _ 和 __ LINE __:

   die '"', __FILE__, '", line ', __LINE__, ", phooey on you!\n";

这句代码生成下面这样的东西:

   "canasta", line 38, phooey on you!

再说另外一种风格——看看下面两个相等的例子:

   die "Can't cd to spool: $!\n"   unless chdir '/usr/spool/news';

   chdir '/usr/spool/news'   or die "Can't cd to spool: $!\n";

因为重要的部分是 chdir,所以通常会用第二种形式。

又见 exit,warn,%SIG,和 Cary 模块。


你可能感兴趣的:(perl函数说明(die))