关闭与文件句柄关联的文件或管道,刷新 IO 缓冲区,并关闭系统文件描述符。如果这些操作成功且没有 PerlIO 层报告错误,则返回 true。如果省略参数,则关闭当前选定的文件句柄。
如果您要立即对它进行另一个 open
操作,则不必关闭 FILEHANDLE,因为 open
会为您关闭它。(参见 open
。)但是,对输入文件进行显式 close
操作会重置行计数器 ($.
),而 open
执行的隐式关闭操作不会。
如果文件句柄来自管道打开,close
如果其他系统调用之一失败或其程序以非零状态退出,则返回 false。如果唯一的问题是程序以非零状态退出,$!
将被设置为 0
。关闭管道也会等待在管道上执行的进程退出 - 以防您希望之后查看管道的输出 - 并隐式地将该命令的退出状态值放入 $?
和 ${^CHILD_ERROR_NATIVE}
中。
如果有多个线程在运行,close
在来自管道打开的文件句柄上返回 true,而无需等待子进程终止,如果文件句柄在另一个线程中仍然打开。
在另一端写入的进程完成写入之前关闭管道的读取端会导致写入者收到 SIGPIPE。如果另一端无法处理这种情况,请确保在关闭管道之前读取所有数据。
示例
open(OUTPUT, '|sort >foo') # pipe to sort
or die "Can't start sort: $!";
#... # print stuff to output
close OUTPUT # wait for sort to finish
or warn $! ? "Error closing sort pipe: $!"
: "Exit status $? from sort";
open(INPUT, 'foo') # get sort's results
or die "Can't open 'foo' for input: $!";
FILEHANDLE 可以是其值可以用作间接文件句柄的表达式,通常是真实的文件句柄名称或自动生成的句柄。