Я запускаю программу, которую периодически хотел бы перезапустить. Я предпочитаю передать exec список, чтобы оболочка не включалась следующим образом:
// Do stuff
.
.
exec $^X, $0, @ARGV;
Когда я делаю это (в Windows) и $ ^ X содержит пробелы, используя приведенное выше, он обрабатывает $ ^ X как несколько элементов и завершается неудачей.
Следующее работает просто отлично, но запускает подоболочку в дополнение к скрипту:
# Do stuff
.
.
exec "\"$^X\" $0 @ARGV" ;
Это не большое дело, но я хотел бы узнать, как выполнить в контексте списка, если это возможно.
Вещи, которые я пробовал:
exec "\"$^X\"", $0, @ARGV;
exec "\\\"$^X\\\"", $0, @ARGV;
exec "'$^X'", $0, @ARGV; # Even though Windows doesn't like '
Также:
push @restart, $^X, $0, @ARGV;
print $restart[0];
exec @restart;
Оператор print правильно показывает исполняемый файл с пробелом в нем как первый элемент в массиве.
Я скопировал исполняемый файл perl в место, не содержащее пробелов в своем пути, и оттуда exec с учетом списка работает.