Вопрос
В чем разница между Cwd::cwd
и Cwd::getcwd
в Perl, вообще говоря, независимо от какой-либо конкретной платформы? Почему у Perl есть и то, и другое? Каково намеренное использование, которое следует использовать в каких сценариях? (Пример использования будет оценен.) Имеет ли это значение? (Предполагая, что я их не смешиваю.) Может ли какой-либо вариант повлиять на переносимость? Какой из них чаще всего используется в модулях?
Даже если я интерпретирую руководство, мы говорим, что, за исключением случаев с квадратом cwd
, `pwd`
и getcwd
просто вызывает getcwd
из unistd.h
, какова фактическая разница? В любом случае, это работает только на системах POSIX.
Я всегда могу прочитать реализацию, но это ничего не говорит о значении этих функций. Детали реализации могут меняться, а не так определенно. (В противном случае происходит перерыв, что является серьезным делом.)
Что говорится в руководстве
Указание Perls Страница руководства модуля cdd:
Каждая из этих функций вызывается без аргументов и возвращает абсолютный путь к текущему рабочему каталогу.
getcwd
my $cwd = getcwd();
Возвращает текущий рабочий каталог.
Предоставляет функцию POSIX getcwd (3) или повторно реализует ее, если она недоступна.
УХО
my $cwd = cwd();
cwd() является наиболее естественной формой для текущей архитектуры. Для большинства систем он идентичен `pwd` (но без терминатора конечной строки).
И в разделе "Примечания":
- На самом деле, в Mac OS функции
getcwd()
,fastgetcwd()
иfastcwd()
- это все псевдонимы для функцииcwd()
, которая в Mac OS вызывает `pwd`. Аналогично, функцияabs_path()
является псевдонимом дляfast_abs_path()
Хорошо, я знаю, что в Mac OS 1 нет разницы между getcwd()
и cwd()
, так как оба фактически сводятся к `pwd`
. Но что на других платформах? (Im особенно интересует Debian Linux.)
1 Классические Mac OS, а не OS X. $^O
значения MacOS
и darwin
для Mac OS и OS X, соответственно. Спасибо, @tobyink и @ikegami.
И немного мета-вопрос: как избежать заданий по подобным вопросам для других модулей с очень похожими функциями? Существует ли универсальный способ обнаружения различий, кроме как выкапывать реализацию? (В настоящее время, я думаю, что если в документации не ясно о предполагаемом использовании и различиях, я должен спросить кого-то более опытного или прочитать реализацию сам.)