Поскольку в 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
or
local $ENV{X1} = "/p/fsd"; # Until end of scope
* Оптимизированный код не должен вести себя иначе, чем неоптимизированный код, но поскольку оптимизация просто изменяет то, какую ошибку вы получаете, это приемлемо.
person
ikegami
schedule
15.11.2012