Потому что нет никаких специальных символов в setenv X1 /p/fsd
,
system("setenv X1 /p/fsd")
эквивалентно
system("setenv", "X1", "/p/fsd")
Это неисправного, потому что есть нет программы с именем setenv
. Если эта оптимизация не существует, вы получаете другой результат *. В этом случае,
system("setenv X1 /p/fsd")
будет эквивалентно
system("sh", "-c", "setenv X1 /p/fsd")
Это не будет работать либо потому, что sh
не имеет setenv
команду. Таким образом, вы можете использовать следующее:
system("tcsh", "-c", "setenv X1 /p/fsd")
Но это было бы бессмысленно. Вы должны создать оболочку, установить одну из ее переменных. Затем оболочка выходит и ее переменные перестают существовать.
Если вы хотите установить ENV вар видели на Perl и его детей, просто использовать
$ENV{X1} = "/p/fsd"; # Until end of program
или
local $ENV{X1} = "/p/fsd"; # Until end of scope
* — Оптимизированный код не должен вести себя иначе, чем unoptimised кода, но поскольку оптимизация просто изменяет какую ошибку вы получаете, это приемлемо.
Возможный дубликат [Установка переменной окружения через Perl-скрипт] (http://stackoverflow.com/questions/19192682/setting-an-environment-variable-through-a-perl-script) –