在打开新文件的路径中指定一个数组变量
Specify an array variable in the path for opening a new file
虽然我发现很多关于如何在 perl 中的 for 循环中打开文件的帖子,但我在目录(也是数组变量)中创建文件时遇到了一个具体问题-
我正在使用
打开一个文件
foreach my $dir (@listofdirs) {
open (my $OUTFILE, '>', "$dir/$dir.txt") or die "$!";
,这不会创建文件并给我一个错误 No such file or directory。
如果我只使用 open (my $OUTFILE, '>', "$dir.txt") or die;
它可以工作并在我执行脚本的主目录下创建一个文件。
我怎样才能 control/specify 路径以便它在每个 $dir 变量(目录)中打开一个文件? 很抱歉,如果之前已经解决了这个问题,但我不确定指定新文件路径的正确方法是什么。
编辑 -
我可以更改在循环内创建文件的目录并每次为其分配 $dir 变量值吗?
没有看到你的错误信息,我很清楚哪里出了问题。
foreach my $dir (@listofdirs) {
open (my $OUTFILE, '>', "$dir/$dir.txt") or die;
...
}
我猜 @listofdirs
包含 /foo/bar
或 foo/bar/baz/
之类的东西,因此 "$dir/$dir.txt"
会创建一些有趣的文件路径。
$dir "$dir/$dir.txt"
/foo/bar /foo/bar//foo/bar.txt
foo/bar/ foo/bar//foo/bar/.txt
foo/ foo//foo/.txt
由于各种原因,其中大部分都无法使用。 /foo/bar//foo/bar.txt
将要求目录 /foo/bar/foo/
已经存在。 foo/bar//foo/bar/.txt
是无效路径。
"$dir/$dir.txt"
无论如何都是一个有趣的结构。你确定那是你的意思吗?
要找出问题所在,您可以在错误消息中添加一些信息。传统的方法是在每次 open
调用时全部手写。
foreach my $dir (@listofdirs) {
open (my $OUTFILE, '>', "$dir/$dir.txt")
or die "Can't open '$dir/$dir.txt': $!";
...
}
现在您将看到它试图打开的内容,以及失败的原因(包含在 $!
). This rapidly gets tiresome and inconsistent, so it's better to let autodie
为您完成。
# at the top of your code along with things like "use strict"
use autodie;
...
foreach my $dir (@listofdirs) {
open (my $OUTFILE, '>', "$dir/$dir.txt");
...
}
虽然我发现很多关于如何在 perl 中的 for 循环中打开文件的帖子,但我在目录(也是数组变量)中创建文件时遇到了一个具体问题-
我正在使用
打开一个文件foreach my $dir (@listofdirs) {
open (my $OUTFILE, '>', "$dir/$dir.txt") or die "$!";
,这不会创建文件并给我一个错误 No such file or directory。
如果我只使用 open (my $OUTFILE, '>', "$dir.txt") or die;
它可以工作并在我执行脚本的主目录下创建一个文件。
我怎样才能 control/specify 路径以便它在每个 $dir 变量(目录)中打开一个文件? 很抱歉,如果之前已经解决了这个问题,但我不确定指定新文件路径的正确方法是什么。
编辑 -
我可以更改在循环内创建文件的目录并每次为其分配 $dir 变量值吗?
没有看到你的错误信息,我很清楚哪里出了问题。
foreach my $dir (@listofdirs) {
open (my $OUTFILE, '>', "$dir/$dir.txt") or die;
...
}
我猜 @listofdirs
包含 /foo/bar
或 foo/bar/baz/
之类的东西,因此 "$dir/$dir.txt"
会创建一些有趣的文件路径。
$dir "$dir/$dir.txt"
/foo/bar /foo/bar//foo/bar.txt
foo/bar/ foo/bar//foo/bar/.txt
foo/ foo//foo/.txt
由于各种原因,其中大部分都无法使用。 /foo/bar//foo/bar.txt
将要求目录 /foo/bar/foo/
已经存在。 foo/bar//foo/bar/.txt
是无效路径。
"$dir/$dir.txt"
无论如何都是一个有趣的结构。你确定那是你的意思吗?
要找出问题所在,您可以在错误消息中添加一些信息。传统的方法是在每次 open
调用时全部手写。
foreach my $dir (@listofdirs) {
open (my $OUTFILE, '>', "$dir/$dir.txt")
or die "Can't open '$dir/$dir.txt': $!";
...
}
现在您将看到它试图打开的内容,以及失败的原因(包含在 $!
). This rapidly gets tiresome and inconsistent, so it's better to let autodie
为您完成。
# at the top of your code along with things like "use strict"
use autodie;
...
foreach my $dir (@listofdirs) {
open (my $OUTFILE, '>', "$dir/$dir.txt");
...
}