Да, это плохая идея. Вот статья, объясняющая, почему это так: Вещи, которые вам необходимо знать перед программированием Perl ithreads
Вот лишь выдержка из вышеупомянутого поста:
В отличие от большинства других реализаций потоков, существующих в мире, включая более старую реализацию потоков Perl 5.005, переменные по умолчанию не разделяются между потоками Perl. Так что это значит? Это означает, что каждый раз, когда вы запускаете поток, все структуры данных копируются в новый поток. И когда я говорю все, я имею в виду все. Это, например, включает в себя тайники пакетов, глобальные переменные, лексические выражения в области видимости. Все! Пример:
use threads ();
my $foo;
threads->new( sub {print "thread: coderef = ".\$foo."\n"} )->join;
print " main: coderef = ".\$foo."\n";
который печатает это на моей системе:
thread: coderef = SCALAR(0x1eefb4)
main: coderef = SCALAR(0x107c90)
Но подождите, вы могли бы сказать, что общие переменные могут быть намного лучше. Так почему бы мне не сделать все переменные общими для моего приложения, чтобы я не страдал от этого. Ну, это не так. Зачем? Потому что общие переменные на самом деле не являются общими. Общие переменные на самом деле являются обычными связанными переменными (со всеми предостережениями и проблемами производительности, связанными с связанными переменными), к которым применяется некоторая «магия». Таким образом, не только общие переменные занимают столько же памяти, сколько «нормальные» переменные, они занимают дополнительную память, потому что вся связанная магия связана с ней. Это также означает, что вы не можете иметь совместно используемые переменные с вашей собственной магией связи (если вы не хотите использовать мой модуль Thread :: Tie).