出于某种原因,我无法使用Expect.pm的log_file
方法处理文件句柄.我最初得到了帮助如何将文件句柄传递给Perl Expect的log_file函数?,建议我使用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
}
Run Code Online (Sandbox Code Playgroud)
那么,我尝试了这个示例代码:
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";
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到两个(在我看来)冲突的项目.一行显示"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: $!";
Run Code Online (Sandbox Code Playgroud)