Подтвердить что ты не робот

Зачем вам назначать $$?

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.)

$$ - это текущий идентификатор процесса, почему в мире вы его назначили?

4b9b3361

Ответ 1

Есть только пара (буквально) мест в CPAN, где люди хотят назначить $$, и это в основном для тестирования (я еще не понял IPC::Messaging). Мне не нравится эта функция, тем более, что есть намного лучший способ получить тот же эффект. Perl 5 Porters добавили эту функцию, потому что могли, и они предпочли бы не делать пару случаев лучше тестировать. Если вы читаете поток p5p, очевидно, что эта функция не была вызвана необходимостью.

Я написал об этом в Скрыть детали низкого уровня за интерфейсом.

Однако я мог ошибаться в этом, потому что я не так хорош в черной магии низкого уровня. Я знаю, что есть необходимость в координации PID, но до сих пор я думаю, что $$ - это не единственный способ сделать это. Если у кого-то есть прецедент, который они могут мне объяснить, я обновлю это сообщение.

Ответ 2

IPC::Messaging, который обеспечивает sorta kinda Erlang-подобный обмен сообщениями (не по производительности, синтаксис) делает это с $$, чтобы заменить его объектом, который указывает на исходный pid. Это делается для удобной ссылки на "самопроцесс", который можно вызвать методы (= отправлять сообщения).

Полное раскрытие: я являюсь автором модуля.

Ответ 3

Если вы использовали реализацию системного вызова fork() в режиме syscall, вам необходимо назначить глобальный.