perl - 你如何检查在 Perl 中打开(文件)是否成功?

标签 perl file-io

以下(不是非常 Perl 风格的)代码

#!/usr/bin/perl

if (! -e "mydir/")
{
  print "directory doesn't exist.\n";
}
open (my $fh, ">", "mydir/file.txt");
if ($fh)
{
  print "file opened.\n";
  print $fh;
  print $fh "some text\n" or die "failed to write to file.\n";
  close ($fh);
}
else
{
  print "failed to open file.\n";
}

产生这样的输出
directory doesn't exist.
file opened.
failed to write to file.
GLOB(0x...some-hex-digits...)

为什么 $fh 在 open 调用后不等于 false?
由于 mydir/不存在,我希望打开文件的尝试会失败。

如果目录和文件存在,我得到类似的结果,但文件是只读的。

我已经在 Windows 7 x64 上使用 Perl 5.10.1 和 Fedora-11 Linux 上使用 Perl 5.10.0 尝试过这个。

我猜我的文件句柄测试是错误的。
我试过谷歌搜索这个没有运气。
我希望这是显而易见的,但任何提示或链接将不胜感激。

谢谢,
抢。

最佳答案

open成功时返回非零值,失败时返回“假”值。你要找的成语是

if (open my $fh, '>', $file) {
    # open was successful
} else {
    # open failed - handle error
}

如果第一个参数 ( $fh ) 未定义(在本例中就是这样), open在尝试打开文件之前,将其初始化为某个任意值(请参阅 Symbol::genysm method )。所以$fh总是 即使 open 也是“真实的”调用失败。

关于perl - 你如何检查在 Perl 中打开(文件)是否成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3203860/

相关文章:

Perl UTF8 编码错误。 LWP::UserAgent->decoded_content 或 Encode::decode 都不起作用。其他想法?

linux - 使窗口保持在对话框中

regex - 将多个正则表达式匹配项之一分配给变量作为 Perl 单行代码(取消引用数组?)

java - 并发读取文本文件并将数据放入数组的线程

perl - 打开位于同一目录中的文件时出错

ruby - 将文件读入数组,不包括注释掉的行

java - 在文件中写入和读取 ListMultimap<Object, Object>

python - 文件未在 python 中发布

c - 如何使用MATLAB fread读取一个txt文件?

regex - Perl 替换文本 block