Aus irgendeinem Grund kann ich keine Dateihandles mit Expect.pm log_file
Methode arbeiten. Ich bekam ursprünglich Hilfe auf How can I pass a filehandle to Perl Expect's log_file function?, wo vorgeschlagen wurde, dass ich ein IO :: Handle-Dateihandle an die Methode übergeben. Das scheint ein anderes Thema zu sein, also dachte ich, ich würde eine neue Frage beginnen.Warum gibt mein perl gesegnetes Dateihandle nicht mit `can ('print')` 'zurück?
Dies ist der säumige Abschnitt 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
}
Also dann, ich diesen Beispielcode versucht:
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";
}
Als ich das laufen, bekomme ich zwei (meiner Meinung nach) widersprüchliche Punkte. Eine Datei mit einer einzelnen Zeile, die "Hello, world" und die Ausgabe von "No" enthält. Meiner Meinung nach sollte die Zeile $fh->can
True zurückgeben. Liege ich hier falsch?
'verwenden Sie streng; Verwenden Sie Warnungen; ' – Ether
Ich habe keine Antwort darüber, warum dies seltsam wirkt, aber ich vermute, ein Teil davon kommt von IO :: Handle nicht eine normale Klasse. Ein Teil davon ist in der Perl-Quelle, anstatt wie ein normales Modul zu leben. Es könnte einen Fehlerbericht verdienen (benutze perlbug) :) –