primero mira el siguiente código.¿Cómo puedo almacenar y acceder a Filehandle en una clase de Perl?
#! /usr/bin/perl
package foo;
sub new {
my $pkg = shift;
my $self = {};
my $self->{_fd} = undef;
bless $self, $pkg;
return $self;
}
sub Setfd {
my $self = shift;
my $fd = shift;
$self_->{_fd} = $fd;
}
sub write {
my $self = shift;
print $self->{_fd} "hello word";
}
my $foo = new foo;
Mi intención es almacenar un identificador de archivo dentro de una clase usando hash. el identificador de archivo no está definido al principio, pero puede iniciarse posteriormente llamando a la función Setfd. luego se puede llamar a escribir para escribir realmente la cadena "hello word" en un archivo indicado por el manejador de archivo, se supone que el manejador de archivo es el resultado de un "write" de éxito abierto.
pero, el compilador perl simplemente se queja de que hay un error de sintaxis en la línea "imprimir". ¿Alguien puede decirme qué sucede aquí? gracias por adelantado.
Algunas notas al margen, utilice cualquiera de estos estilos de nombres para mostrar mejor la separación palabra: '' setFd' o set_fd' o 'SetFd'. Mantenga un estilo de capitalización consistente, ya sea 'write' y' set_fd' o 'Write' y' Set_Fd' (sugiero el primero). También en Perl es un "identificador de archivo" no un "descriptor de archivo", por lo que querría 'set_fh'. Finalmente, active las advertencias ('use warnings' o ponga '-w' en la línea' #! '), Revelará un error en su constructor. – Schwern
Además, 'use strict', ya que habría revelado este error no sintáctico, pero probablemente no lo que significa en esta línea de código' $ self _-> {_ fd} = $ fd; ' –
@ Schwern: gracias por tu consejo. –