我是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
已经过时了。在某些时候,我认为我需要为最新版本分叉。
但是,我在这里错过了什么?或者在创建文件之前必须手动创建目录?
答案 0 :(得分:8)
是的,必须手动创建目录。
使用mkdir
功能。
您可以使用-d $dir
检查目录是否已存在(请参阅perldoc -f -X
)。
答案 1 :(得分:7)
使用File::Path创建任意深度路径。使用dirname查找包含目录的文件。
另外,使用词法文件句柄和三参数open:
open(my $fd, ">", $name) or die "Can't open $name: $!";