Перемещение по дереву каталогов
Вы уже, вероятно, знакомы с понятием "текущий каталог" и с тем, как использовать команду cd shell. В системном программировании для изменения текущего каталога процесса вы производили бы системный вызов chdir. В Perl тоже используется это имя.
Функция chdir в Perl принимает один аргумент — выражение; при его вычислении определяется имя каталога, который становится текущим. Как и в большинстве других системных вызовов, при успешном изменении текущего каталога на затребованный chdir возвращает значение "истина", а при неудачном исходе — "ложь". Вот пример:
chdir("/etc") || die "cannot cd to /etc ($!)";
Круглые скобки не обязательны, поэтому можно обойтись и такой записью:
print "where do you want to go? ";
chomp($where = <STDIN>) ;
if (chdir $where) f
# получилось ) else {
# не получилось >
Вы не сможете определить, где вы находитесь, не запустив команду pwcf. О запуске команд мы расскажем в главе 14.
* Или не использовав функцию getcwd () из модуля Cwd.
Для каждого процесса* назначается свой текущий каталог. Когда запускается новый процесс, он наследует текущий каталог своего родительского процесса, но на этом вся связь заканчивается. Если Perl-программа меняет свой каталог, это не влияет на родительский shell (или иной объект), который запустил этот Perl-процесс. Точно так же процессы, создаваемые Perl-программой, не влияют на текущий каталог самой этой программы. Текущие каталоги для новых процессов наследуются от текущего каталога Perl-программы.
По умолчанию функция chdir без параметра делает текущим начальный каталог, почти так же, как команда cd
shell.