【问题标题】:Do I need "close FILEHANDLE" check for errors?我需要“关闭文件句柄”检查错误吗?
【发布时间】:2010-01-15 07:57:29
【问题描述】:

“close $fh or die $!;”行中的“or die $!”部分有用吗?

#!/usr/bin/env perl
use warnings;
use strict;

my $file = 'my_file';
open my $fh, '<', $file or die $!;

print <$fh>;

close $fh or die $!;

【问题讨论】:

    标签: perl


    【解决方案1】:

    在您的示例中,因为它位于脚本的末尾和打开以供阅读的文件上,所以它是不必要的。

    我试图在读取管道时考虑是否有必要。通常你会在 EOF 条件后关闭,所以我认为也没有必要。

    但是,如果您正在编写,则可能会在关闭时间检测到各种错误。最简单的例子是一个完整的磁盘。由于缓冲,在关闭文件句柄之前可能不会报告此问题。

    你也可以use autodie(我认为推荐在Fatal之上)。

    【讨论】:

      【解决方案2】:

      如果文件已打开以供读取,则不需要。

      但是,当打开文件进行写入时,可能无法在 close 处刷新 IO 缓冲区,因此在这种情况下它可能很有用

      【讨论】:

        【解决方案3】:

        是的,“或死”应该这样做。

        但是在实践中,关闭文件时检查错误是不必要的,因为关闭可以合理地给你的唯一错误是“错误的文件描述符”,即文件一开始没有打开 - 这意味着它实际上成功了无论如何。

        您也可以考虑使用 Fatal。 (perldoc 致命)

        【讨论】:

        • 如果句柄被打开到管道并且进程因错误而终止,您也可能在关闭时收到错误。
        • 您还可以从以前的写入中得到错误(如果写入被缓冲并且在系统调用返回之后发生错误)。
        猜你喜欢
        • 2015-03-28
        • 1970-01-01
        • 2019-08-01
        • 2021-02-24
        • 2013-11-30
        • 1970-01-01
        • 2012-05-26
        • 2013-05-19
        • 2013-01-10
        相关资源
        最近更新 更多