为什么perl';s自动冲模功能不包括;打印;?(有解决办法吗?)

为什么perl';s自动冲模功能不包括;打印;?(有解决办法吗?),perl,Perl,仔细看了一下另一个问题()autodie是一个非常有用的术语,因为它会发出各种可能是致命的、实际上是致命的调用 类似于open——编写open或die是很常见的 但autodie的问题是: 印刷品 autodie pragma不会检查打印调用。 你不能强迫它: Cannot make the non-overridable builtin print fatal 除了编写我自己的“print\u或_die”sub,有没有一种方法可以复制类似于autodiepragma的东西,它也会捕获prin

仔细看了一下另一个问题()
autodie
是一个非常有用的术语,因为它会发出各种可能是致命的、实际上是致命的调用

类似于
open
——编写
open或die
是很常见的

但autodie的问题是:

印刷品

autodie pragma不会检查打印调用。

你不能强迫它:

Cannot make the non-overridable builtin print fatal
除了编写我自己的“print\u或_die”sub,有没有一种方法可以复制类似于
autodie
pragma的东西,它也会捕获
print
返回代码


(对于可能与此相关的场景,请参阅上面的链接。NFS软装载写入错误,它们不会阻止)

在我看来,您自己有答案:

因为它[autodie]发出各种各样的调用,而这些调用可能是 致命的,实际上是致命的


据我所知,
print
大多数情况下不应该是致命的,所以您提供的解决方案
print\u或_die
似乎也是一个解决方案

我只想补充一个问题,
close()。这是可能的,但要困难得多。我认为在打印失败的情况下,close可以成功—除了我链接的示例之外,我认为“磁盘已满”允许您打开/关闭长度为零的文件,但无法成功打印到该文件。或者可能只是犯了一个错误,打开一个文件进行读取而不是写入;打开我的$fh,“>”,“/dev/full”;选择$h$|=1.打印“x”或警告“打印失败,带$!($!+0)。”;close$fh
,打印和关闭都失败(使用缓冲,只是关闭失败),我的问题是-如果我想让文件IO“爆炸”,我希望它适用于所有内容-打开、打印、关闭。尽管打开/关闭工作,打印仍可能失败。(磁盘已满、支架损坏等)。因此,如果您这样做的话,应该测试print,以避免文件损坏。(或者,至少,您可以知道您是否成功地“写入”了您的输出)。