如何在Perl中创建一个目录?

3
我是新手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 Cookbook第7.1章节得到了这个想法。它无法运行,并显示错误消息Bareword "O_CREAT" not allowed while "strict subs" in use。不过,该书出版于1998年,因此O_CREAT可能已经过时。我认为在某一点上,我需要花钱购买最新版本的书籍。但是,我还是想知道我错了什么?或者,在创建文件之前,是否必须手动创建目录?

1
O_CREAT并不过时,它是由Fcntl模块提供的符号。您需要这样导入它:use Fcntl qw(O_CREAT); - 将该行添加到其他use语句附近。 - daxim
2个回答

8

对的,需要手动创建目录。 使用 mkdir 函数。

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


7
使用File::Path创建任意深度的路径。使用dirname查找文件所在的目录。
此外,使用词法文件句柄以及三参数打开方式:
open(my $fd, ">", $name) or die "Can't open $name: $!";

谢谢。我之前不知道有三个参数的打开方式,但当我最终开始给它们变量名时,这将会很方便。同时,变量文件句柄也肯定会有所帮助。目前我还没有深入测试基础内容。 - msikd65
2
@msikd65:它们通常被称为“词法”文件句柄。确实是一个不错的特性。 - Dallaylaen
3
Perl自带一组标准的File::*模块。完整列表请参见perldoc perlmodlib - shawnhcorey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接