Я думаю, что вы задали неправильный вопрос, прочитав код, позвольте мне угадать вашу настоящую проблему.У вас есть Perl-скрипт, который выполняет некоторую работу, не показанную для установки некоторых переменных, которые затем используются для запуска 2 внешних программ.Вы хотите запустить обе программы одновременно и сохранить выходные данные каждой из них в своем собственном файле журнала.
Самый простой способ сделать это - запустить обе программы в фоновом режиме, а оболочка выполнит перенаправление.
system("./sm.sh $SE_VER $SMS_VERSION > /logs/${SM}.smlog &");
system("./sp.sh $SE_VER $SMS_VERSION > /logs/${SM}.splog &");
Это вернется к вашему сценарию, не дожидаясь завершения какой-либо программы, если позже в программе есть код, требующий завершения команд, вам может потребоваться более сложное решение.