G’day堆料机
我是Perl的作者
autodie
pragma,它更改Perl的内置组件,以便在失败时抛出异常。类似于
Fatal
但在词汇范围、可扩展的异常模型、更智能的返回检查以及更多更好的错误消息方面。它将取代
Fatal
Perl未来版本中的模块(暂时为5.10.1+),但目前可以从CPAN for Perl 5.8.0及更高版本下载。
的下一个版本
autodie
将为呼叫添加特殊处理
flock
与
LOCK_NB
(非阻塞)选项。失败时
一大群
调用通常会导致
自动冲模
,调用失败
一大群
使用
洛克尼布
如果返回的错误号为(
$!
是
EWOULDBLOCK
.
原因是人们可以继续编写代码,比如:
use Fcntl qw(:flock);
use autodie;
open(my $fh, '<', 'some_file.txt');
my $lock = flock($fh, LOCK_EX | LOCK_NB);
if ($lock) {
}
在上面的代码中,由于其他人已经锁定了文件而失败的锁。(
块体
)不被认为是一个硬错误,因此自动生成
一大群
只返回一个错误值。在这种情况下,我们使用的文件系统不支持文件锁,或者网络文件系统和网络刚刚停止,然后自动生成
一大群
当它发现我们的errno不是
块体
.
在我的开发版本中,这在Unix风格的系统上运行得很好,但在Windows下却失败了。虽然Windows下的Perl支持
洛克尼布
选项,它没有定义
块体
. 相反,当发生阻塞时,返回的errno是33(“域错误”)。
显然,我可以把这个常量硬编码成
自动冲模
但这不是我想在这里做的,因为这意味着如果errno改变了(或者改变了),我就完蛋了。我想把它和相当于
POSIX::EWOULDBLOCK
但我一辈子都找不到这样的定义。如果你能帮忙,告诉我。
我特别不想要的答案:
-
建议将其硬编码为常量(或者更糟的是,留下一个浮动的幻数)。
-
不支持
洛克尼布
在Windows下的所有功能。
-
假设
洛克尼布
打电话给
一大群
只会返回错误。
-
我在p5p或
perlmonks
. 我已经知道了。
-
如何解释
一大群
或例外,或
致命的
工作。我已经知道了。亲密地