Разделители справочников Perl - PullRequest
9 голосов
/ 13 декабря 2011

Я действительно должен это знать, но я работал в основном с Linux, Mac OS X и Windows, которые используют косую черту (/) в качестве разделителя каталогов (Windows может использовать \ или /.).

Это означает, что когда я обычно пишу программы на Perl, я могу просто использовать / в качестве разделителя каталогов, и все в порядке.Тем не менее, я знаю, что File::Spec предполагается для обеспечения переносимости разделителей файлов (что бы это ни значило).

Если я в системе, которая не использует прямые косые черты какразделитель каталогов, я понимаю, что пользователи ожидают, что смогут вводить файлы с разделителями по умолчанию и видеть вывод с разделителями по умолчанию.(Например, пользователь Windows будет вводить и ожидать, что выходные данные будут C:\Users\smith\Documents, а не C:/Users/smith/Documents), но что делает Perl внутри?

Могу ли я, несмотря на то, что платформа может использовать в качестве разделителя каталогов, просто используйте косую черту, когда я имею дело с файлами внутри.Например, у меня есть каталог $dir и файл с именем $file, и я хочу открыть файл.Могу ли я просто сказать $dir/file, или мне нужно использовать File::Spec для сопоставления имени для меня?

На самом деле, для Perl требуются прямые косые черты в именах каталогов?Я пишу модуль и буду доставлять имена файлов в вызывающую программу.Должен ли я указать файл как /foo/bar/fubar или если система использует двоеточия, например раннюю ОС Macintosh, скажем, :foo:bar:fubar?

1 Ответ

7 голосов
/ 13 декабря 2011

perlport говорит почти все, что можно сказать по этому вопросу.Тем не менее, системы, которые не могут принять / в качестве разделителя пути, встречаются редко, и вы, возможно, не так уж много выиграете от использования File::Spec с верой повсюду.Но также будьте осторожны, чтобы различать внутреннее и внешнее использование разделителя каталогов.Например, это будет работать в Windows:

open my $fh, '<', 'C:/some/directory/to/some/file';

, но это может не сработать, поскольку его необходимо обработать оболочкой Windows:

system("C:/some/program.exe C:/some/program/argument.txt");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...