Подпрограмма рекурсивного зеркального отображения каталога get_dir() . Данная подпрограмма является более сложной по сравнению с get_file(), поскольку она должна вызывать саму себя рекурсивно для получения копий каталогов, вложенных один в другой. Как и get_file() , эта подпрограмма вызывается с обязательным параметром, который указывает путь к каталогу, и необязательным параметром, указывающим режим доступа к каталогу.
Выполнение подпрограммы начинается с создания локальной копии каталога в текущем paбочем каталоге, если она еще не создана; для создания промежуточных каталогов при необходимости применяется процедура mkpath(). Затем происходит переход во вновь создании каталог с помощью встроенной функции chdir() языка Perl и осуществляется изменение режима доступа к каталогу, если это было затребовано.
Выполняется выборка значения имени текущего рабочего каталога на удаленном компьютере путем вызова метода pwd() объекта FTP. Это значение пути доступа сохраняется в локальной переменной для последующего применения. После этого происходит переход с помощью функции cwd() в каталог удаленного компьютера, для которого должна быть получена зеркальная копия.
Теперь должно быть выполнено копирование содержимого каталога, предназначенного для зеркального отображения, на локальный компьютер. Вызывается метод dir() объекта FTP для получения полного листинга каталога. С помощью подпрограммы parse_listing() выполняется интерпретация каждой строки листинга с получением значений типа, имени и режима доступа к файлу. Имена обычных файлов передаются подпрограмме get_file(), имена символических ссылок — подпрограмме make_link(), а имена подкаталогов рекурсивно передаются подпрограмме get_dir().