2016-02-22 2 views
0

Я пытаюсь создать каталог, в следующем коде:Mkdir ошибка Perl: нет такого файла

# reads in files from a corpus 
    for my $corpusFile (glob("./Corpus/*.txt")) { 

    # makes part of the name of the file the name for a directory 
    my $file = substr ($corpusFile, 9, 6); 
    my $outputFiles = "./Output/$file"; 
    mkdir $outputFiles unless -e $outputFiles or die "Cannot make file directory: $!"; 

Однако я получаю ошибку: Cannot make file directory: No such file or directory at perl/corpus.pl

Я не очень понимаю эту ошибку , Конечно, директория не существует - я пытаюсь ее создать.

Чтобы немного объяснить структуру файла: у меня есть большая папка, содержащая «выходную» папку и папку «perl» - мой код perl находится в папке «perl», и я пытаюсь создать каталог в «output». Я очень новичок в perl, поэтому прошу прощения, если ответ здесь очевиден.

+0

'' Выход' существует? mkdir не будет рекурсивно создавать структуру для вас. –

+0

Если $ file является каталогом, то почему он называется файлом? Если $ file - это каталог, тогда ваш тест должен быть -d не -e. Для рекурсивного создания dirs используется File :: Path. –

+0

... как в прекрасном руководстве говорится: «Посмотрите на функцию make_path модуля File :: Path» – toolic

ответ

4

Если посмотреть на то, как это выражение:

mkdir $outputFiles 
    unless -e $outputFiles 
or die "Cannot make file directory: $!"; 

разбирается Perl, то ответ очевиден. Вы можете увидеть, как это анализируется с помощью (-p печатает круглые скобки):

perl -MO=Deparse,-p \ 
    -e 'mkdir "foo" unless -e "foo" or die "Cannot create foo: $!" 

производит:

(((-e 'foo') or die("Cannot create foo: $!")) or mkdir('foo')); 
-e syntax OK 

Теперь вы должны быть в состоянии увидеть проблему, в соответствии с вышеприведенным выражением:

1) Если каталог 'foo' не существует, программа будет умереть с сообщением 'Cannot create foo: No such file or directory'

2) Если каталог 'foo', программа назовет mkdir 'foo'. Это бессмысленно, поскольку оно уже существует.

Смежные вопросы