Подпрограмма get_file (). Эта подпрограмма выполняет выборку файла в том случае, если он является более новым по сравнению с локальной копией или если локальная копия отсутствует. После получения файла предпринимается попытка изменить его режим доступа в соответствии с режимом доступа на удаленном узле. Режим доступа может быть указан вызывающей процедурой; в ином случае определение режима доступа выполняется в самой подпрограмме. Вначале происходит определение значений времени последнего изменения и размера файла на удаленном компьютере с помощью методов mdtm() и size() объекта FTP. Помните, что эти методы могут возвращать значение undef при обращении к более старым серверам, которые не поддерживают эти вызовы.
Если вызывающей процедурой не был указан режим доступа, вызывается метод dir () объекта FTP для получения листинга каталога для затребованного) файла и полученный результат передается в подпрограмму parse_listing() , которая разбивает строку листинга каталога на трехэлементный список, состоящий из обозначений типа файла, имени и режима. Затем выполняется поиск файла на локальном компьютере по тому же сокращенному пути доступа и осуществляется вызов функции stat() для получения информации о размере и времени последнего изменения локального файла. После этого выполняется сравнение размера и времени последнего изменения файла на удаленном компьютере с соответствующими параметрами локальной копии. Если эти файлы имеют одинаковый размер и файл на удаленном компьютере имеет такую же (или более раннюю) отметку времени, как и файл на локальном компьютере, то обновлять локальную копию нет необходимости. В ином случае вызывается метод get() объекта FTP для получения файла с удаленного компьютера. После успешного выполнения передачи файла режим доступа к файлу изменяется в соответствии со значением режима доступа к копии файла на удаленном компьютере.