Как создать каталог и родительские каталоги в одной команде Perl?

В Perl, как я могу создать подкаталог и в то же время создавать родительские каталоги, если они не существуют? Как команда UNIX mkdir -p?

Ответы

Ответ 1

use File::Path qw(make_path);
make_path("path/to/sub/directory");

Устаревший mkpath и предпочтительный make_path вытекают из обсуждения в потоке Perl 5 Porters, который архивируется здесь.

В двух словах, тестирование Perl 5.10 показало неловкость в анализе аргументов интерфейса makepath(). Таким образом, он был заменен более простой версией, в которой в качестве окончательного аргумента принимался хэш, чтобы установить параметры для этой функции.

Ответ 2

Использовать mkpath из модуля File:: Path:

use File::Path qw(mkpath);
mkpath("path/to/sub/directory");

Ответ 3

Не забудьте игнорировать, если вы ищете модуль 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, потому что для импорта и вызова модуля требуется меньшее количество служебных данных, когда мне нужно это только один раз, чтобы создать каталог.

Ответ 4

ref http://perldoc.perl.org/File/Path.html

"Функция make_path создает указанные каталоги, если они еще не существуют [sic!], как команда Unix mkdir -p"