Как мне создать каталог в Perl? - PullRequest
3 голосов
/ 21 мая 2011

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

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

Пока я смог заставить это работать:

use strict;
my $content = "Hello world";
open MYFILE, ">C:/PerlFiles/test.txt";
print MYFILE $content;
close (MYFILE);

test.txt не существует, но C:/PerlFiles/ делает, и якобы ввод > позволяет мне создатьфайлы, отлично.

Следующее, однако, не работает:

use strict;
my $content = "area = pi*r^2";
open MYFILE, ">C:/PerlFiles/math_class/circle.txt";
print MYFILE $content;
close (MYFILE);

Каталог C:/PerlFiles/math_class/ не существует.

Я также пытался sysopen, но яПри добавлении флагов выдается ошибка:

use strict;
my $content = "area = pi*r^2";
sysopen (MYFILE, ">C:/PerlFiles/math_class/circle.txt", O_CREAT);
print MYFILE $content;
close (MYFILE);

Эта идея пришла из Кулинарной книги Perl глава 7.1.Открытие файла .Это не работает, и я получаю сообщение об ошибке Bareword "O_CREAT" not allowed while "strict subs" in use.С другой стороны, книга 1998 года, поэтому, возможно, O_CREAT устарела.В какой-то момент я думаю, что мне понадобится раскошелиться на тесто для последней версии.

Но все же, чего мне здесь не хватает?Или каталоги должны быть созданы вручную перед созданием в нем файла?

Ответы [ 2 ]

8 голосов
/ 21 мая 2011

Правильно, каталоги нужно создавать вручную.Используйте функцию mkdir.

Вы можете проверить, существует ли каталог с -d $dir (см. perldoc -f -X).

7 голосов
/ 21 мая 2011

Используйте File :: Path для создания произвольно глубоких путей. Используйте dirname , чтобы узнать каталог, содержащий файл.

Кроме того, используйте лексические дескрипторы файлов и открытие с тремя аргументами:

open(my $fd, ">", $name) or die "Can't open $name: $!";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...