Зачем вы присваиваете $$? - PullRequest
12 голосов
/ 08 августа 2011

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

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

Ответы [ 3 ]

8 голосов
/ 08 августа 2011

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

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

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

3 голосов
/ 08 августа 2011

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

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

0 голосов
/ 08 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...