为什么我的Perl祝福文件句柄不能用`can(‘print’)`’返回true?

前端之家收集整理的这篇文章主要介绍了为什么我的Perl祝福文件句柄不能用`can(‘print’)`’返回true?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
出于某种原因,我无法使用Expect.pm的log_file方法处理文件句柄.我最初在 How can I pass a filehandle to Perl Expect’s log_file function?得到了帮助,建议我使用IO :: Handle文件句柄传递给方法.这似乎是一个不同的问题,所以我想我会开始一个新的问题.

这是Expect.pm的违规部分:

if (ref($file) ne 'CODE') {
  croak "Given logfile doesn't have a 'print' method"
    if not $fh->can("print");
  $fh->autoflush(1);        # so logfile is up to date
}

那么,我尝试了这个示例代码

use IO::Handle;
open $fh,">>","file.out" or die "Can't open file";
$fh->print("Hello,world");
if ($fh->can("print"))
{
  print "Yes\n";
}
else
{
  print "No\n";
}

当我运行这个时,我得到两个(在我看来)冲突的项目.一行显示“Hello,world”和“No”输出文件.在我看来,$fh-> can行应返回true.我错了吗?

解决方法

奇怪的是,看起来您需要创建一个真正的 IO::File对象才能使can方法起作用.尝试

use IO::File;

my $fh = IO::File->new("file.out",">>")
    or die "Couldn't open file: $!";

猜你在找的Perl相关文章