【发布时间】:2020-01-16 14:44:43
【问题描述】:
我试图在 Perl 中做一些非常奇特的事情,但我认为我正在承受后果。实际上,我不知道我试图做的事情是否可行。
我的主程序创建一个这样的管道:
pipe(my $pipe_reader, my $pipe_writer);
(最初是 pipe(PIPE_READER, PIPE_WRITER) 但我在尝试调试时更改为常规变量)
然后它分叉,但我认为这在这里可能无关紧要。孩子这样做:
my $response = Response->new($pipe_writer);
Response 的构造函数很简单:
sub new {
my $class = shift;
my $writer = shift;
my $self = {
writer => $writer
};
bless($self, $class);
return($self);
}
然后孩子会写下它的回应:
$response->respond(123, "Here is my response");
响应代码如下:
sub respond {
my $self = shift;
my $number = shift;
my $text = shift;
print $self->{writer} "$number\n";
print $self->{writer} "$text\n";
close $self->{writer}
}
这会触发一个奇怪的编译错误:'String found where operator expected ... Missing operator before "$number\n"?'在第一次打印时。当然,这是打印的正常语法,除了我有对象属性而不是普通句柄,而且它恰好是管道,而不是文件句柄。所以现在我想知道我是否不允许这样做。
【问题讨论】:
标签: perl