Как сделать файловые операции Perl независимыми от платформы? - PullRequest
2 голосов
/ 13 октября 2011

Я использую Perl в Linux, но я начал использовать File::Spec->catfile, чтобы мой Perl-код также работал в Windows, например,

$tmp = File::Spec->catfile($ENV{HOME}, "tmp");

вместо

$tmp = "$ENV{HOME}/tmp";

Но как я могу сделать следующий код переносимым:

my @files = <$ENV{HOME}/tmp/*>;

Он использует косые черты в качестве разделителей файлов, поэтому я предполагаю, что он не будет работать в Windows. И я не понимаю, как использовать File::Spec->catfile в этом выражении?

Ответы [ 2 ]

4 голосов
/ 13 октября 2011

Поскольку catfile просто возвращает строку, которая может использоваться в качестве имени файла, вы можете сделать что-то вроде этого (не проверено):

$tmp = File::Spec->catfile($ENV{HOME}, "tmp", "*");
my @files = glob $tmp;

Но $ENV{HOME} вряд ли будет установленов системе Windows.

Вы можете рассмотреть возможность использования File::Spec->tmpdir().

4 голосов
/ 13 октября 2011

Можно использовать функцию glob:

my @files = glob File::Spec->catfile( $ENV{'HOME'}, 'tmp', '*' );

Как отмечалось в других комментариях, Perl работает с / в Windows. Однако, чтобы сделать его более портативным, я рассмотрю вышеупомянутое использование.

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