Как я могу создать каталог, если он не существует с помощью Perl?

В настоящее время мой вывод Perl жестко закодирован для сброса в следующий каталог Unix:

my $stat_dir = "/home/courses/" . **NEED DIR VAR HERE**;

имя файла строится так:

$stat_file = $stat_dir . "/" . $sess.substr($yr, 2, 2) . "_COURSES.csv";

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

Как я могу сделать автоматическую нумерацию (ревизии) $stat_file, чтобы, когда эти файлы закачиваются в тот же каталог, они не перезаписываются или не добавляются к существующим файлам в каталог?

4 ответов


использовать -d оператора File:: Path.

use File::Path qw(make_path);
eval { make_path($dir) };
if ($@) {
  print "Couldn't create $dir: $@";
}

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

и использовать -e чтобы проверить существует файл

my $fileSuffix = 0;
while (-e $filename) {
    $filename = $filePrefix . ++$fileSuffix . $fileExtension;
}

эээ... mkdir $stat_dir unless -d $stat_dir?

это действительно не кажется хорошей идеей вставлять "дополнительные" вопросы.


Perl имеет встроенную функцию mkdir

взгляните на perldoc perlfunc или программу mkdir из Perl Электроинструменты.

Я считаю, что безопасно создать каталог, который уже существует, взгляните на документы.


помните, что каталог -d существование не значит -w запись. Но предполагая, что вы находитесь в личной зоне mkdir($dir) unless(-d $dir) будет работать нормально.