当前位置:  开发笔记 > 编程语言 > 正文

如何检查文件句柄是否在Perl中打开?

如何解决《如何检查文件句柄是否在Perl中打开?》经验,为你挑选了4个好方法。

有没有办法检查文件是否已在Perl中打开?我想要一个读取文件访问权限,所以不要求flock.

 open(FH, "<$fileName") or die "$!\n" if ();
 #  or something like
 close(FH) if ();

chaos.. 38

请参阅答案就openhandle()Scalar::Util.我最初在这里写的答案曾经是我们能做的最好的,但它现在已经过时了.



1> chaos..:

请参阅答案就openhandle()Scalar::Util.我最初在这里写的答案曾经是我们能做的最好的,但它现在已经过时了.


导致错误:...在未打开的文件句柄上告诉()...

2> 小智..:

该标量::的Util模块提供的openhandle()功能这一点.与fileno()不同,它处理与OS文件句柄无关的perl文件句柄.与tell()不同,它在未打开的文件句柄上使用时不会产生警告来自模块的文档:

openhandle FH

Returns FH if FH may be used as a filehandle and is open, or FH is a tied handle. Otherwise "undef" is returned.

   $fh = openhandle(*STDIN);           # \*STDIN
   $fh = openhandle(\*STDIN);          # \*STDIN
   $fh = openhandle(*NOTOPEN);         # undef
   $fh = openhandle("scalar");         # undef


[openhandle警告](http://stackoverflow.com/questions/3807231/how-can-i-test-if-i-can-write-to-a-filehandle/4200474#4200474)
这是唯一真正的解决方案,谢谢.

3> Leon Timmerm..:

你为什么想这么做?我能想到的唯一原因是当你使用旧式包文件句柄(你似乎正在做)并且想要防止意外地将一个句柄保存在另一个句柄上时.

可以使用新样式间接文件句柄来解决该问题.

open my $fh, '<', $filename or die "Couldn't open $filename: $!";



4> converter42..:

Perl 为此提供了fileno函数.

编辑我的目的是纠正fileno().我更喜欢较短的测试

fileno FILEHANDLE

过度

tell FH != -1

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有