Por alguna razón, no puedo hacer que Filehandles funcione con el método log_file
de Expect.pm. Originalmente recibí ayuda en How can I pass a filehandle to Perl Expect's log_file function?, donde se me sugirió que use un identificador de archivo IO :: Handle para pasar al método. Este parece ser un problema diferente, así que pensé en comenzar una nueva pregunta.¿Por qué mi identificador de archivo bendecido de Perl no devuelve verdadero con `can ('print')` '?
Ésta es la sección del infractor 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
}
Así, pues, he intentado este código de ejemplo:
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";
}
Cuando ejecuto esto, y llévese dos (a mi mente) artículos en conflicto Un archivo con una sola línea que dice "Hola, mundo", y una salida de "No". En mi opinión, la línea $fh->can
debería ser verdadera. ¿Me equivoco aquí?
'use strict; usar advertencias; ' – Ether
No tengo una respuesta sobre por qué esto está actuando raro, pero sospecho que parte de esto proviene de IO :: Handle no es una clase normal. Algo de eso está dentro de la fuente perl en lugar de vivir como un módulo normal. Podría merecer un informe de error (use perlbug) :) –