有没有办法检查文件是否已在Perl中打开?我想要一个读取文件访问权限,所以不要求flock
.
open(FH, "<$fileName") or die "$!\n" if (); # or something like close(FH) if ( );
chaos.. 38
请参阅答案就openhandle()
从Scalar::Util
.我最初在这里写的答案曾经是我们能做的最好的,但它现在已经过时了.
请参阅答案就openhandle()
从Scalar::Util
.我最初在这里写的答案曾经是我们能做的最好的,但它现在已经过时了.
该标量::的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
你为什么想这么做?我能想到的唯一原因是当你使用旧式包文件句柄(你似乎正在做)并且想要防止意外地将一个句柄保存在另一个句柄上时.
可以使用新样式间接文件句柄来解决该问题.
open my $fh, '<', $filename or die "Couldn't open $filename: $!";
Perl 为此提供了fileno函数.
编辑我的目的是纠正fileno()
.我更喜欢较短的测试
fileno FILEHANDLE
过度
tell FH != -1