如何在Perl中创建目录?

时间:2011-05-21 11:01:45

标签: perl file-io

我是Perl的新手并尝试编写文本文件。我可以将文本文件写入现有目录没问题,但最终我希望能够创建自己的目录。

我要从我的课程网站下载文件,我想将这些文件放在以课程命名的文件夹中。我不想事先手动为每个课程创建一个文件夹,我也希望最终与其他人共享该脚本,所以我需要一种方法来创建目录并根据HTML中的课程名称命名它们。 / p>

到目前为止,我已经能够实现这一目标:

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 Cookbook章节 7.1中得到了这个想法。打开文件。它不起作用,我收到错误消息Bareword "O_CREAT" not allowed while "strict subs" in use。然后这本书是从1998年开始的,所以也许O_CREAT已经过时了。在某些时候,我认为我需要为最新版本分叉。

但是,我在这里错过了什么?或者在创建文件之前必须手动创建目录?

2 个答案:

答案 0 :(得分:8)

是的,必须手动创建目录。 使用mkdir功能。

您可以使用-d $dir检查目录是否已存在(请参阅perldoc -f -X)。

答案 1 :(得分:7)

使用File::Path创建任意深度路径。使用dirname查找包含目录的文件。

另外,使用词法文件句柄和三参数open:

open(my $fd, ">", $name) or die "Can't open $name: $!";