doc говорит:
Функция возвращает список каталогов, фактически созданных во время вызова; в скалярном контексте число созданных каталогов.
, как ikdegami указывал на следующей обработке ошибок не будет работа
mkpath($path) or print "Error creating $path\n" unless -d $path;
потому что mkpath будет каркать на фатальных ошибках. (с Carp), поэтому он скорее прекратит выполнение, так как сообщение об ошибке может быть напечатано.
... если исполнение mkpath
не попало в блок eval. (см. ikegami's anser)
Захват с помощью eval приведет только к одной ошибке. например:
eval { mkpath($p2, $p3); 1 } or die "Can't create home directory: [email protected]\n";
если оба $p1
и $p2
терпит неудачу - не будет сообщать о всех ошибках. Чтобы распечатать все ошибки, вы можете использовать настраиваемую переменную для хранения диагностических сообщений, см. Раздел ERROR HANDLING документа
В этом случае mkpath не будет кричать, а в случае фатальной ошибки будет возвращено число успешно созданных каталоги (в скалярном контексте), например:
mkpath($path1, $path2 , {error => \my $err});
из дока:
Обратите внимание, что если ошибки не встречается, $ ERR будет ссылаться на пустой массиве. Это означает, что $ err всегда будет TRUE; поэтому вам необходимо установить test @ $ err, чтобы определить, произошли ли ошибки.
И вы можете распечатать их все, см. Пример в документе.
Мне все равно. Я просто хочу, чтобы ошибка была quiesced для уже существующей директории.Я понимаю, что я всегда могу кодировать вокруг него, но если есть еще одна функция или метод, которые уже имеют это ... – Paul