Зачем вам назначать $$?
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.)
$$
- это текущий идентификатор процесса, почему в мире вы его назначили?
Ответы
Ответ 1
Есть только пара (буквально) мест в CPAN, где люди хотят назначить $$
, и это в основном для тестирования (я еще не понял IPC::Messaging
). Мне не нравится эта функция, тем более, что есть намного лучший способ получить тот же эффект. Perl 5 Porters добавили эту функцию, потому что могли, и они предпочли бы не делать пару случаев лучше тестировать. Если вы читаете поток p5p, очевидно, что эта функция не была вызвана необходимостью.
Я написал об этом в Скрыть детали низкого уровня за интерфейсом.
Однако я мог ошибаться в этом, потому что я не так хорош в черной магии низкого уровня. Я знаю, что есть необходимость в координации PID, но до сих пор я думаю, что $$
- это не единственный способ сделать это. Если у кого-то есть прецедент, который они могут мне объяснить, я обновлю это сообщение.
Ответ 2
IPC::Messaging
, который обеспечивает sorta kinda Erlang-подобный обмен сообщениями (не по производительности, синтаксис) делает это с $$
, чтобы заменить его объектом, который указывает на исходный pid. Это делается для удобной ссылки на "самопроцесс", который можно вызвать методы (= отправлять сообщения).
Полное раскрытие: я являюсь автором модуля.
Ответ 3
Если вы использовали реализацию системного вызова fork() в режиме syscall, вам необходимо назначить глобальный.