Как создать каталог и родительские каталоги в одной команде 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
"