é permitido passar tubos para construtores?

Eu tentei fazer algo muito chique em Perl, e acho que estou sofrendo as consequências. Não sei se o que estava tentando fazer é possível, na verdade.

Meu programa principal cria um pipe como este:

pipe(my $pipe_reader, my $pipe_writer);

(originalmente era pipe (PIPE_READER, PIPE_WRITER), mas mudei para variáveis regulares quando estava tentando depurar isso)

Então bifurca, mas acho que provavelmente é irrelevante aqui. A criança faz isso:

my $response = Response->new($pipe_writer);

O construtor de Response é simples:

sub new {
    my $class = shift;
    my $writer = shift;

    my $self = {
        writer => $writer
    };
    bless($self, $class);
    return($self);
 }

Depois, a criança escreverá sua resposta:

$response->respond(123, "Here is my response");

O código para responder é o seguinte:

sub respond {
    my $self = shift;
    my $number = shift;
    my $text = shift;
    print $self->{writer} "$number\n";
    print $self->{writer} "$text\n";
    close $self->{writer}
}

Isso desencadeia um estranho erro de compilação: 'String encontrada onde o operador esperava ... Operador ausente antes de "$ number \ n"?' no ponto da primeira impressão. É claro que essa é a sintaxe normal para uma impressão, exceto que eu tenho a propriedade de objeto em vez de um identificador normal E acontece que é um pipe, não um identificador de arquivo. Então agora estou me perguntando se não tenho permissão para fazer isso.

questionAnswers(1)

yourAnswerToTheQuestion