Pour une raison quelconque, les handles de fichiers ne peuvent pas fonctionner avec la méthode log_file
d'Expect.pm. J'ai d'abord obtenu de l'aide sur How can I pass a filehandle to Perl Expect's log_file function?, où il a été suggéré que j'utilise un handle de fichier IO :: Handle pour passer à la méthode. Cela semble être une question différente, alors j'ai pensé que je commencerais une nouvelle question.Pourquoi mon handle de fichier Perl béni ne renvoie-t-il pas true avec `can ('print)' '?
C'est la partie incriminée de 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
}
Ainsi donc, j'ai essayé cet exemple de code:
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";
}
Quand je lance cela, je reçois deux (à mon avis) des objets contradictoires. Un fichier avec une seule ligne qui dit «Bonjour, monde», et la sortie de «Non». À mon avis, la ligne $fh->can
devrait retourner vrai. Est-ce que je me trompe ici?
'use strict; j'utilise des avertissements; ' – Ether
Je n'ai pas de réponse à propos de la raison pour laquelle cela agit bizarrement, mais je soupçonne qu'une partie de cela vient de IO :: Handle n'étant pas une classe normale. Une partie de cela est à l'intérieur de la source Perl au lieu de vivre comme un module normal. Il pourrait mériter un rapport de bug (utilisez perlbug) :) –