Почему мой благословенный Perl дескриптор файла не возвращает true с помощью `can ('print')` '?

По какой-то причине я не могу заставить дескрипторы файлов работать с файлом журнала Expect.pm метод. Первоначально я получил помощь по Как передать дескриптор файла функции log_file Perl Expect? , где было предложено использовать дескриптор файла 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» и выводом «Нет». На мой взгляд, строка $ fh-> can должна возвращать true. Я здесь не прав?

5
задан Community 23 May 2017 в 11:43
поделиться