fork
从BEGIN
块中调用 Perl 时,我无法理解 Perl 中的行为。在perlfork中,我读到了这个
开始块
从块中调用时,
fork()
仿真将无法完全正常工作。BEGIN
分叉的副本将运行BEGIN
块的内容,但不会在块之后继续解析源流BEGIN
。例如,考虑以下代码:BEGIN { fork and exit; # fork child and exit the parent print "inner\n"; } print "outer\n";
这将打印:
inner
而不是预期的:
inner outer
但是,当我读到它时,这仅适用于fork
被模拟的平台。由于我关心(并在 Linux 上测试代码),这应该不是问题,不是吗?
确实,如果我从该文档中复制示例代码
BEGIN {
fork and exit;
print "inner\n";
}
print "outer\n";
这就是我运行它时发生的事情
jirka@debian:~/xpath$ perl /tmp/test.pl
jirka@debian:~/xpath$ inner
outer
这似乎是一致的。
但是,当我删除时,exit
我希望同时拥有父进程和子进程。那并没有像我预期的那样表现。
这是我的新代码
BEGIN {
fork;
print "inner\n";
}
print "outer\n";
这是运行
jirka@debian:~/xpath$ perl /tmp/test.pl
inner
outer
jirka@debian:~/xpath$ inner
我预计两个inner
和两个outer
。第二个outer
不见了。
我的问题是,是什么导致了这种奇怪的行为,甚至如何描述它。