【发布时间】:2015-02-14 19:45:47
【问题描述】:
稍微看了一下另一个问题(Print or die: how to check if a GPFS network mounted file is available)autodie 是一个非常有用的编译指示,因为它会发出各种可能致命的调用,实际上是致命的。
open 之类的东西 - 写成 open or die 很常见。
但是autodie的问题是:
打印
autodie pragma 不检查打印调用。
你不能强迫它:
Cannot make the non-overridable builtin print fatal
没有编写我自己的“print_or_die”子程序,有没有办法复制类似于autodie pragma 的东西,它也会捕获print 返回码?
(对于可能相关的场景 - 请参阅上面的链接。写入时 NFS 软安装错误,它们不会阻塞)
【问题讨论】:
-
我只想补充一个问题,如果
print()中的一些在此之前失败,close()是否可以成功。 -
问题是 print 操作符有一个 subs 无法复制的语法。这是可能的,但要困难得多。
-
我认为关闭可以在打印失败的情况下成功 - 除了我链接的示例之外,我认为“磁盘已满”将允许您打开/关闭零长度文件,但不能成功打印到它。或者可能只是犯了一个错误,然后打开一个文件进行读取而不是写入。
-
我不太确定你的磁盘示例
-
使用
use autodie; open my $fh, ">", "/dev/full"; select $h; $|=1; print "x" or warn "print failed with $! (".($!+0).")"; close $fh进行测试,打印和关闭都失败(使用缓冲,只是关闭失败)
标签: perl