arrays - perl 打开文件名中带有变量的文件

标签 arrays perl file

我尝试打开文件夹中的文件列表。最终我想在其中插入一个 HTML 片段。到目前为止,我可以打开文件夹并读取数组中的列表。没关系。但是当我尝试使用变量作为文件名打开文件时,我每次都会收到一条错误消息(“权限被拒绝”)。无论我是使用 $_ 还是将列表项的值放入变量的其他变体。我在这里找到了类似的问题,但到目前为止还没有找到解决方案。这是我的代码:

use strict;
use warnings;

my ($line);

opendir (FOLDER,"path/to/folder/./") or die "$!";
my @folderlist = readdir(FOLDER);
my @sorted_folderlist = sort @folderlist;
close(FOLDER);

foreach (@sorted_folderlist) {
  my $filename = $_;
  open (READ, ">", "path/to/folder/$filename") or die "$!";
  # do something
  close (READ);
}

这里有什么错误?以及如何使用变量作为文件名打开文件?

普约恩

这是我为了回答 1 而更改的代码:
my $dh; 
opendir $dh, "dir/./" or die ... 
my @folderlist = grep { -f "dir/$_" } readdir $dh; 
close $dh; 
my @sorted_folderlist = sort @folderlist; 

foreach my $filename (@sorted_folderlist) { 
  open my $fh, "<", "dir/$filename" or die ... 
  open my $writeto, ">", "new/$filename" or die ... 
  print $writeto "$fh"; 
  close $fh; 
  close $writeto; 
}

最佳答案

您的代码中有几个问题。

第一个导致错误的可能是 readdir()将返回 ...也,但这些是目录。所以你试着写信给 directory/. .

其次,您的错误消息包含 $! , 这很好,但你不输出文件名。那么你就会看到你的错误。

第三,调用一个为写入而打开的文件句柄 READ .

此外,您现在应该使用词法文件句柄。

use strict;
use warnings;

opendir my $dh, "dir" or die $!;
# read all files, not directories
my @folderlist = grep { -f "dir/$_" } readdir $dh;
close $dh;
my @sorted_folderlist = sort @folderlist;

foreach my $filename (@sorted_folderlist) {
    open my $fh, ">", "dir/$filename" or die "Could not write to dir/$filename: $!";
    print $fh "foo...\n";
    close $fh;
}

关于arrays - perl 打开文件名中带有变量的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47840317/

相关文章:

html - 如何让 "file"类型的HTML输入元素只接受pdf文件?

java - 使用 ScriptObjectMirror 将数组结果从 JavaScript 转换为有用的东西

java - 将 Zip 文件作为 InputStream,然后分离其中的每个文件,然后将其转换为图像。 java 语

javascript - 计算数组中表达式为 true 的项目数

perl - 在 perl 中使用指向文件中行的指针

python - 如何在 Python 中从流追加到文件而不是覆盖

C - 将整数转换为二进制数组

perl - Grep 匹配模式文件的所有行(perl -e 也可以)

perl - 有关提供静态文件的文档

Android openFileOutput - 没有创建存储的权限