我是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 Cookbook第7.1章得到了这个想法.打开文件.它不起作用,我收到错误消息Bareword "O_CREAT" not allowed while "strict subs" in use.然后这本书是从1998年开始的,所以也许O_CREAT已经过时了.在某些时候,我认为我需要为最新版本分叉.
但是,我在这里错过了什么?或者在创建文件之前必须手动创建目录?
使用File :: Path创建任意深度路径.使用dirname查找包含目录的文件.
此外,使用词法文件句柄和三参数打开:
open(my $fd, ">", $name) or die "Can't open $name: $!";
Run Code Online (Sandbox Code Playgroud)