¿Está permitido pasar tuberías a los constructores?
Traté de hacer algo muy elegante en Perl, y creo que estoy sufriendo las consecuencias. No sé si lo que estaba tratando de hacer es posible, en realidad.
Mi programa principal crea una tubería como esta:
pipe(my $pipe_reader, my $pipe_writer);
(originalmente era pipe (PIPE_READER, PIPE_WRITER) pero cambié a variables regulares cuando intentaba depurar esto)
Luego se bifurca, pero creo que eso es irrelevante aquí. El niño hace esto:
my $response = Response->new($pipe_writer);
El constructor de Response es básico:
sub new {
my $class = shift;
my $writer = shift;
my $self = {
writer => $writer
};
bless($self, $class);
return($self);
}
Luego, el niño escribirá su respuesta:
$response->respond(123, "Here is my response");
El código para responder es el siguiente:
sub respond {
my $self = shift;
my $number = shift;
my $text = shift;
print $self->{writer} "$number\n";
print $self->{writer} "$text\n";
close $self->{writer}
}
Esto desencadena un extraño error de compilación: 'Cadena encontrada donde el operador esperaba ... ¿Falta operador antes de "$ number \ n"?' en el punto de la primera impresión. Por supuesto, esta es la sintaxis normal para una impresión, excepto que tengo la propiedad del objeto en lugar de un identificador normal Y resulta ser una tubería, no un identificador de archivo. Así que ahora me pregunto si no se me permite hacer esto.