如何在Perl中创建目录?

msi*_*d65 3 perl file-io

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

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

到目前为止,我已经能够使这个工作:

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

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);
Run Code Online (Sandbox Code Playgroud)

该目录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);
Run Code Online (Sandbox Code Playgroud)

我从Perl Cookbook7.1章得到了这个想法.打开文件.它不起作用,我收到错误消息Bareword "O_CREAT" not allowed while "strict subs" in use.然后这本书是从1998年开始的,所以也许O_CREAT已经过时了.在某些时候,我认为我需要为最新版本分叉.

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

小智 8

对,必须手动创建目录.使用mkdir功能.

您可以检查目录是否已存在-d $dir(请参阅参考资料perldoc -f -X).


Dal*_*aen 7

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

此外,使用词法文件句柄和三参数打开:

open(my $fd, ">", $name) or die "Can't open $name: $!";
Run Code Online (Sandbox Code Playgroud)

  • 有一组与Perl一起安装的标准`File ::*`模块.有关完整列表,请参阅`perldoc perlmodlib`. (3认同)
  • @msikd65:它们通常被称为*lexical*文件句柄.确实很不错的功能. (2认同)