¿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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta