File :: Spec действительно необходим? - PullRequest
6 голосов
/ 14 июля 2011

Я знаю все об истории разных ОС, имеющих разные форматы путей, но на данный момент, похоже, существует общее согласие (с одним несущественным несогласным *) о том, как работают пути. Я считаю, что весь File::Spec путь управления путями неуклюж и бесполезен.

Действительно ли стоит иметь этот барочный набор функций для манипулирования путями? Пожалуйста, убедите меня, что я близорука.

* Не имеет значения, потому что даже MS Windows допускает прямую косую черту в путях, а это означает, что единственная прикольная вещь - это громкость в начале, и это никогда не было для меня проблемой.

Ответы [ 5 ]

7 голосов
/ 14 июля 2011

Две основные системы имеют объемы.Какой родитель C:?В Unix это C:/...В Windows это C:...(К сожалению, большинство людей неправильно используют File :: Spec до такой степени.)

В основных системах есть три разных набора разделителей пути.Тот факт, что Windows поддерживает «/», может упростить создание путей, но это не помогает их анализировать или канонизировать.

File :: Spec также предоставляет полезные функции, которые делают его полезным, даже если бы каждая система это делалаиспользуйте тот же стиль путей, например тот, который превращает путь в относительный путь.

Тем не менее, я никогда не использую File :: Spec.Вместо этого я использую Path :: Class .Без ущерба для удобства использования или полезности, Path :: Class предоставляет гораздо лучший интерфейс.И это не позволяет пользователям неправильно обрабатывать тома.

3 голосов
/ 14 июля 2011

Для обычного управления файлами внутри Perl, No, File :: Spec нет необходимости, и использование прямых слэшей повсюду делает намного меньше проблем и в любом случае работает на Win32.

cpanminus - хороший пример, который используется многими людьми и отлично работает на платформе win32. он не использует File :: Spec для большинства манипуляций с путями к файлам, а просто использует прямую косую черту - это даже предлагали опытные разработчики Perl-Win32.

Единственное место, где мне пришлось использовать catfile File :: Spec в cpanm, это где я извлекаю пути к файлам из сообщения об ошибке perl (Can't locate File\Path.pm blah blah) и создаю путь к файлу для передачи в командную строку (т.е. cmd .exe).

Между тем File :: Spec предоставляет полезные функции, такие как canonical и rel2abs - это не «само по себе», а действительно полезно.

3 голосов
/ 14 июля 2011

Да, абсолютно.

Золотое правило программирования, никогда не кодируйте строковые литералы.
Редактировать: Один из лучших способов избежать проблем с портированием - избегать специфических констант ОС, особенно в виде встроенных литералов.

т.е. например, диск + ": /" + путь + "/" + имя файла

Пока это плохая практика Мы все совершаем эти злодеяния в спешке или потому, что это не имеет значения для этого куска кода. File :: Spec существует, когда программист придерживается программирования Евангелия.

Кроме того, он предоставляет значения специальных и часто используемых системных каталогов, например tmp или devnull, которые могут варьироваться от одного дистрибутива / ОС к другому.

Если что-то может быть сделано с некоторыми другими членами, добавленными к нему, например, пользователь указывает на домашний каталог пользователей

1 голос
/ 15 июля 2011

makepp (makepp.sourceforge.net) имеет переменную makefile $ /, которая либо /, либо \ (в не-Cygwin Win). Причина в том, что Win принимает / в именах файлов, но не в именах команд (где он запускает опцию).

0 голосов
/ 16 июля 2011

С http://perldoc.perl.org/File/Spec.html:

catdir

Объединить два или более имен каталогов, чтобы сформировать полный путь, заканчивающийся каталогом.Но удалите косую черту из полученной строки, потому что она не выглядит хорошо, не нужна и сбивает с толку OS / 2.Конечно, если это корневой каталог, не отсекайте косую черту: -)

Так, например, в этом примере мне не понадобится регулярное выражение дляудалите косую черту, если бы я использовал catdir.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...