Почему вы не хотите использовать 'exec "$ SHELL -c ..."'? Если вы не хотите видеть этот код каждый раз, когда вы вызываете exec или system, просто спрячьте его в подпрограмме. Вот для чего они здесь. :)
sub my_exec {
exec $ENV{SHELL}, '-c', @_;
}
Однако, если вы хотите сделать это, я предлагаю как-то санировать $ ENV {SHELL}, чтобы люди не делали странных вещей с вашим сценарием, устанавливая странные значения. Возможно, вы захотите убедиться, что оболочка указана в / etc / shells или каким-либо другим способом, который ваша система выводит на экран одобренные оболочки входа. Вам также нужно проделать немного больше работы, чтобы сделать эту работу более чистой, что вам, вероятно, следует сделать, если вы собираетесь отправлять данные в другой процесс.