下面的代码(不太像 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...)
Why is $fh不等于公开调用后的 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 http://search.cpan.org/perldoc/Symbol) before它尝试打开该文件。所以$fh
will always是“真实的”,即使open
呼叫失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)