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