Как создать каталог и родительские каталоги с помощью одной команды Perl?
-
20-08-2019 - |
Вопрос
Как в Perl создать подкаталог и в то же время родительские каталоги, если они не существуют?Как команда mkdir -p в UNIX?
Решение
use File::Path qw(make_path);
make_path("path/to/sub/directory");
Устаревший mkpath и предпочтительный make_path возникли в результате обсуждения в заархивированной ветке Perl 5 Porters. здесь.
Короче говоря, тестирование Perl 5.10 выявило неуклюжесть анализа аргументов интерфейса makepath().Поэтому она была заменена более простой версией, которая принимала хеш в качестве последнего аргумента для установки параметров функции.
Другие советы
Используйте mkpath из модуля File::Path:
use File::Path qw(mkpath);
mkpath("path/to/sub/directory");
Пожалуйста, игнорируйте, если вы ищете модуль Perl с функциональностью «mkdir -p», но следующий код будет работать:
my $dir = '/root/example/dir';
system ("mkdir -p $dir 2> /dev/null") == 0
or die "failed to create $dir. exiting...\n";
Вы можете использовать модуль, но тогда вам придется установить его на каждый сервер, на который вы собираетесь переносить свой код.Обычно я предпочитаю использовать системную функцию для такой работы, как mkdir, потому что импорт и вызов модуля требуют меньших затрат, когда он мне нужен только один раз для создания каталога.
ссылка http://perldoc.perl.org/File/Path.html
«Функция make_path создает заданные каталоги, если они не существовали [sic!] ранее, во многом аналогично команде Unix mkdir -p
"
mkdir() позволяет вам создавать каталоги в вашем Perl-скрипте.
Пример:
use strict;
use warnings;
my $directory = "tmp";
unless(mkdir($directory, 0755)) {
die "Unable to create $directory\n";
Эта программа создает каталог с именем «tmp» с разрешениями, установленными на 0755 (только владелец имеет разрешение на запись в каталог;члены группы и другие лица могут только просматривать файлы и просматривать содержимое каталога).