你为什么要分配给$$?

时间:2011-08-08 01:08:56

标签: perl

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,您为什么要分配给它?

3 个答案:

答案 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()系统调用的系统调用实现,则需要分配给全局调用。