perldoc perl5150delta
说:
$$ can be assigned to
$$ was made read‐only in Perl 5.8.0. But only sometimes: "local $$"
would make it writable again. Some CPAN modules were using "local $$"
or XS code to bypass the read‐only check, so there is no reason to keep
$$ read‐only. (This change also allowed a bug to be fixed while
maintaining backward compatibility.)
$$
是当前的流程ID,您为什么要分配给它?
答案 0 :(得分:8)
CPAN中只有几个(字面上)的地方,人们想要分配给$$
,而且主要用于测试(我还没有理解IPC::Messaging
)。我不喜欢这个功能,特别是因为有更好的方法来获得相同的效果。 Perl 5 Porters添加了这个功能,因为他们可以而且他们宁愿不让两个案例做得更好。如果您阅读p5p线程,很明显此功能不是由需要驱动的。
我在Hide low-level details behind an interface写了这篇文章。
然而,我可能错了,因为我对低级黑魔法并不擅长。我知道需要协调PID,但到目前为止我认为$$
不是唯一的方法。如果有人有可以向我解释的用例,我会更新该帖子。
答案 1 :(得分:3)
IPC::Messaging
,它提供了类似于类似Erlang的消息传递(不是性能方面的,语法方面的),它向$$
执行,以将其替换为与原始pid相等的对象。这样做是为了方便地引用“自我进程”,可以调用方法(=发送消息)。
完全披露:我是该模块的作者。
答案 2 :(得分:-1)
如果您是fork()系统调用的系统调用实现,则需要分配给全局调用。