Как я могу создать независимые от ОС пути к файлам в Perl, включая дополнительную букву диска Windows? - PullRequest
7 голосов
/ 30 ноября 2009

Мне нужно создать путь к файлу внутри скрипта Perl. Какой разделитель пути я должен использовать, чтобы мой скрипт работал как в Windows, так и в Unix?

Имейте в виду, что Windows требуется буква диска.

Ответы [ 5 ]

12 голосов
/ 30 ноября 2009

Вы хотите Файл :: Spec catpath:

       catpath()
         Takes volume, directory and file portions and returns an entire path.
         Under Unix, $volume is ignored, and directory and file are
         concatenated.  A '/' is inserted if need be.  On other OSes, $volume
         is significant.

             $full_path = File::Spec->catpath( $volume, $directory, $file );
8 голосов
/ 30 ноября 2009

Вы хотите Файл :: Spec . Существуют специальные версии для Unix , Win32 и MacOS , а также другие .

5 голосов
/ 30 ноября 2009

Если вы находите File :: Spec громоздким, как и я, попробуйте Path :: Class . Он дает вам возможность работать с каталогом и файловыми объектами, а не вызывать длинные строки метода класса File :: Spec для строк.

2 голосов
/ 30 ноября 2009

Звучит так, как будто вы используете разделитель пути для обозначения символа между компонентами каталогов / имен файлов. Но на всякий случай вы имели в виду другое значение:

Некоторые вещи (особенно переменные окружения, такие как MANPATH или PERL5LIB) принимают список имен файлов или каталогов, разделенных символом-разделителем пути. Модуль Perl Config переносит такой символ, как $ Config :: Config {'path_sep'}.

0 голосов
/ 30 ноября 2009

В: Какой разделитель путей я должен использовать, чтобы мой скрипт работал как в Windows, так и в Unix?

A: /.

Explanation:
Windows can work similarly to Unix with / as path separator.
(Mac OS uses : as a path separator instead of /).

The File::Spec modules can also help.

    use File::Spec::Functions;
    chdir(updir());        # go up one directory
    $file = catfile(curdir(), 'temp', 'file.txt');
    # on Unix and Win32, './temp/file.txt'
    # on Mac OS, ':temp:file.txt'
    # on VMS, '[.temp]file.txt'

Source: 
http://www.xav.com/perl/lib/Pod/perlport.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...