Причина, по которой вы не можете сделать это, вызвав system
, заключается в том, что system
запустит новый процесс, выполнит вашу команду и вернет статус выхода.Поэтому, когда вы вызываете system "cd foo"
, вы запускаете процесс оболочки, который переключается в каталог «foo» и затем завершается.В вашем скрипте perl ничего не случится.Точно так же, system "exit"
запустит новый процесс и сразу же выйдет из него снова.
То, что вы хотите для случая cd, это - как указывает Боба - функция chdir
.Для выхода из вашей программы есть функция exit
.
Однако - ни один из них не повлияет на состояние сеанса терминала, в котором вы находитесь. После завершения вашего сценария perl рабочий каталог вашего терминала будеткак и прежде, и вы не сможете выйти из сеанса терминала, вызвав exit
в вашем скрипте perl.
Это потому, что ваш скрипт perl снова является отдельным процессом от вашей терминальной оболочки,и вещи, которые происходят в отдельных процессах, как правило, не мешают друг другу.Это функция, а не ошибка.
Если вы хотите, чтобы что-то изменилось в вашей оболочке, вы должны дать инструкции, понятные и интерпретируемые вашей оболочкой.cd
- это такая встроенная команда в вашей оболочке, как exit
.