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