Как писал Зайд, Thread :: Semaphore довольно медленный. Одной из оптимизаций может быть использование неявных блокировок для общих переменных вместо них. Это должно быть быстрее, хотя я подозреваю, что это не будет намного быстрее.
В общем, реализация многопотоковой реализации Perl не подходит для любого вида использования, который требует много межпоточного взаимодействия. Он очень подходит для задач с малой связью (поскольку в отличие от потоков CPython и потоков CRuby они на самом деле имеют приоритет).
Возможно, можно улучшить эту ситуацию, нам нужны лучшие примитивы.